解决.htaccess二级页面重定向至三级页面的过多重定向问题
解决Apache重定向循环(ERR_TOO_MANY_REDIRECTS)问题
这个问题我之前踩过同款坑,典型的重定向循环导致的!咱们先搞清楚根源,再给你两个靠谱的修复方案。
问题为什么会出现?
你的规则RewriteRule ^work/(.*)$ work/john/$1 [L,R=301]会匹配所有以work/开头的URL——包括重定向后生成的/work/john/xxx路径。举个具体流程:
- 访问
https://example.com/work/design/download,规则把它重定向到https://example.com/work/john/design/download - 但新URL依然以
work/开头,规则会再次触发,把它重定向到https://example.com/work/john/john/design/download - 这个过程无限重复,直到浏览器判定重定向次数过多,抛出
ERR_TOO_MANY_REDIRECTS错误
修复方案
方案一:用条件排除已重定向的路径
添加一个RewriteCond条件,让规则只对不是以/work/john/开头的请求生效,这样重定向后的URL就不会再次触发规则了:
RewriteEngine On RewriteBase / # 排除已经指向john子路径的请求,避免循环 RewriteCond %{REQUEST_URI} !^/work/john/ RewriteRule ^work/(.*)$ work/john/$1 [L,R=301]
方案二:用正则负向前瞻精确匹配
利用正则的负向前瞻断言,直接让规则只匹配work/后面**不是john/**的内容,从匹配源头上避免循环:
RewriteEngine On RewriteBase / # 仅匹配work/后未紧跟john/的路径 RewriteRule ^work/(?!john/)(.*)$ work/john/$1 [L,R=301]
额外注意事项
- 清除浏览器缓存:因为301是永久重定向,浏览器会缓存之前的错误重定向规则,建议用隐身模式测试,或者手动清除缓存后再验证。
- 测试边缘路径:比如直接访问
https://example.com/work/(末尾带斜杠),确认它会正确重定向到https://example.com/work/john/且不会循环。
内容的提问来源于stack exchange,提问作者user1448031
相关产品推荐
相关产品推荐

