htaccess两组规则组合引发Too many redirects错误原因咨询
重定向循环原因解析
两组规则单独运行正常,但组合后出现「Too many redirects」错误,核心是内部重写触发规则二次执行,进而形成重定向闭环,具体流程如下:
初始请求触发外部重定向
当用户访问站点根目录(如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/。内部重写触发规则二次遍历
用户浏览器请求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/。
循环形成
上述步骤反复执行:重定向→内部重写→再次重定向,最终导致浏览器判定为重定向循环,抛出「Too many redirects」错误。
内容的提问来源于stack exchange,提问作者Melbis
相关产品推荐
相关产品推荐

