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

htaccess两组规则组合引发Too many redirects错误原因咨询

重定向循环原因解析

两组规则单独运行正常,但组合后出现「Too many redirects」错误,核心是内部重写触发规则二次执行,进而形成重定向闭环,具体流程如下:

  1. 初始请求触发外部重定向
    当用户访问站点根目录(如https://example.com/)且Accept-Language以en开头时,第一组规则:

    RewriteCond %{HTTP:Accept-Language} ^en [NC]
    RewriteCond %{REQUEST_URI} !^/en/ [NC]
    RewriteRule ^(.*)$ https://example.com/en/$1 [NC,R=301,L]
    

    检测到请求路径不是/en/开头,执行301重定向到https://example.com/en/。

  2. 内部重写触发规则二次遍历
    用户浏览器请求https://example.com/en/时,第二组规则:

    RewriteRule ^(en)/$ ?lang=$1 [L]
    

    执行内部重写(无R标记,仅服务器内部跳转),将/en/转换为?lang=en,实际指向站点默认首页(如index.php)。

    关键在于:Apache执行内部重写后,会重新从头加载并执行整个.htaccess规则集。此时:

    • Accept-Language仍为en开头;
    • 内部重写后的请求路径变回根目录/(查询参数?lang=en不影响REQUEST_URI的判断);
    • 第一组规则的%{REQUEST_URI} !^/en/条件再次满足,于是又触发301重定向到https://example.com/en/。
  3. 循环形成
    上述步骤反复执行:重定向→内部重写→再次重定向,最终导致浏览器判定为重定向循环,抛出「Too many redirects」错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 05:06:11