Nginx配置后持续重定向并追加尾部斜杠问题如何解决
问题根因
你遇到的重定向循环是三个问题共同导致的:
- Nginx默认对目录类请求会自动301重定向到带尾斜杠的路径,而你配置的rewrite规则是把所有带尾斜杠的请求重定向到不带尾斜杠的路径,二者形成反复跳转的循环
- 你当前的rewrite规则没有排除静态文件请求,且正则贪婪匹配在处理多斜杠路径时会反复触发重定向,就会出现路径末尾不断追加斜杠的情况
- 你贴出的配置片段没有对应
location块的闭合},如果实际运行的配置也存在语法缺漏,会导致重定向规则作用范围异常,进一步放大循环问题
修复方案
第一步:调整Nginx配置
将你现有的/documentation对应的location块修改为以下内容:
location /documentation { alias /workspace/documentation; # 精准匹配/documentation下所有带尾斜杠的路径,去尾斜杠后重定向 rewrite ^(/documentation.*)/+$ $1 permanent; # 关闭目录自动追加尾斜杠的默认逻辑,从根源避免冲突 absolute_redirect off; # 静态文件直接返回,不参与重定向逻辑 location ~* \.(html|htm|css|js|png|jpg|jpeg|gif|svg|ico)$ { expires 7d; add_header Cache-Control "public, no-transform"; } }
第二步:清理缓存测试
因为你之前用的是permanent(301永久重定向),浏览器会缓存旧的重定向规则,修复配置后需要清理浏览器缓存或者用无痕模式测试,避免旧缓存导致仍然出现循环。
可选优化(React侧)
如果需要更稳妥,可以在React的重定向逻辑中,给目标路径增加去尾斜杠的处理,避免首次跳转就携带多余斜杠触发重定向规则。
内容的提问来源于stack exchange,提问作者Mohamed Zouari
相关产品推荐
相关产品推荐

