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处理,不会触发物理路径匹配逻辑。

验证方式
- 登录服务器进入项目
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
相关产品推荐
相关产品推荐

