You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony访问/invoices路由报ERR_TOO_MANY_REDIRECTS 重命名可恢复

Symfony /invoices路由ERR_TOO_MANY_REDIRECTS问题排查

问题根因

该问题由 public根目录下存在与路由同名的invoices物理目录,叠加Apache默认处理规则触发重定向循环导致:

  • 突发原因:发票功能通常会将生成的PDF等文件存储到public/invoices目录,当第一张发票生成时,程序会自动创建该物理目录(无代码部署变更也会触发)。目录创建前,Apache会直接将/invoices请求转发给Symfony路由,访问正常;目录创建后Apache会优先匹配物理路径,触发重定向逻辑。
  • 循环逻辑:
    • 第一步:80端口虚拟主机将HTTP请求301跳转到HTTPS对应地址
    • 第二步:HTTPS请求到达后,Apache检测到/invoices是真实物理目录,触发mod_dir模块默认规则,301重定向补全尾部斜杠到/invoices/
    • 第三步:/invoices/路径下无默认索引文件,现有FallbackResource规则与mod_dir的目录校验逻辑冲突,重复触发重定向形成死循环
  • 修改路由路径后可正常访问,是因为新路径与物理目录名不冲突,Apache直接将请求转发给Symfony处理,不会触发物理路径匹配逻辑。

ERR_TOO_MANY_REDIRECTS报错截图

验证方式

  • 登录服务器进入项目public目录,执行ls -l命令,检查是否存在名为invoices的文件夹即可确认问题。
  • 也可以执行以下命令跟踪重定向链,直接查看每一步跳转的来源:
curl -I -L https://你的域名/invoices

修复方案

根据业务需求选择任意一种即可:

  • 方案1(推荐):调整静态文件存储路径
    不要将生成/上传的静态文件放在public根目录下与路由同名的路径,将发票存储目录修改为public/storage/invoices这类非根级、不与路由重名的路径,删除public根目录下的invoices文件夹即可恢复。
  • 方案2:必须保留public/invoices目录存储静态文件
    参考现有bundles目录的配置规则,在Apache的HTTP、HTTPS两个虚拟主机配置中,为invoices目录单独添加规则,避免规则冲突:
    <Directory /var/www/html/public/invoices>
        DirectoryIndex disabled
        FallbackResource disabled
        Options -Indexes # 禁止目录列表,避免文件泄露
    </Directory>
    
    修改完成后执行systemctl restart apache2重启服务即可生效。
  • 方案3(临时修复,不推荐长期使用):
    直接删除public目录下自动生成的invoices文件夹即可立刻恢复路由访问,但后续发票生成逻辑会再次自动创建该目录,问题会复发。

内容的提问来源于stack exchange,提问作者PureFlow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 02:36:32