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

解决.htaccess二级页面重定向至三级页面的过多重定向问题

解决Apache重定向循环(ERR_TOO_MANY_REDIRECTS)问题

这个问题我之前踩过同款坑,典型的重定向循环导致的!咱们先搞清楚根源,再给你两个靠谱的修复方案。

问题为什么会出现?

你的规则RewriteRule ^work/(.*)$ work/john/$1 [L,R=301]会匹配所有以work/开头的URL——包括重定向后生成的/work/john/xxx路径。举个具体流程:

  1. 访问https://example.com/work/design/download,规则把它重定向到https://example.com/work/john/design/download
  2. 但新URL依然以work/开头,规则会再次触发,把它重定向到https://example.com/work/john/john/design/download
  3. 这个过程无限重复,直到浏览器判定重定向次数过多,抛出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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 22:22:27