网站重建后.htaccess出现重定向循环问题排查
嘿,这个重定向循环的问题出在你用的Redirect 301 /es ...规则的匹配逻辑上!
mod_alias的Redirect指令是前缀匹配的——也就是说,只要请求的URL路径以/es开头,就会触发这个重定向。举个实际的执行流程:
- 当你访问
/es时,会被重定向到/es/inicio - 但新的请求
/es/inicio同样是以/es开头的,所以又会被这条规则匹配,重定向到/es/inicio/inicio - 接着
/es/inicio/inicio还是符合前缀要求,继续重定向到/es/inicio/inicio/inicio……就这样陷入了无限循环!
解决办法
你需要把这个前缀匹配的重定向改成精确匹配——也就是只让/es(或者带结尾斜杠的/es/)这个精准请求触发重定向,而不是所有以/es开头的路径。
推荐统一用mod_rewrite来实现所有重定向(避免mod_alias和mod_rewrite的处理顺序冲突),修改后的.htaccess配置如下:
RewriteEngine On # 精确匹配 /es 或 /es/,重定向到新首页 RewriteRule ^/?es/?$ /es/inicio [R=301,L] # 处理旧页面的重定向(替换原来的Redirect规则) RewriteRule ^/?es/node/64$ /es/vacaciones-y-actividades/actividades-locales [R=301,L] # 隐藏.php后缀的规则保持不变 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule (.*) $1.php [L]
关键细节说明
^/?es/?$这个正则表达式精确匹配两种请求:/es和/es/,不会影响任何以/es开头的子路径(比如/es/inicio)。[R=301,L]里的L标记表示这是最后一条执行的规则,匹配后就停止处理后续规则,避免不必要的干扰。
这样修改后,访问/es会被正确重定向到/es/inicio,而/es/inicio会被后续规则自动加上.php后缀,正常访问到/es/inicio.php,彻底解决循环问题!
内容的提问来源于stack exchange,提问作者elb
相关产品推荐
相关产品推荐

