URL重写后301重定向失效,出现重定向循环问题求助
解决Apache重定向循环(301过多)问题
兄弟,你这明显是掉进重定向循环的坑里啦!咱们先拆解下问题根源:
你先设置了RewriteRule ^solar-solutions-in-india.php?$ solution.php [L],把新URL内部重写到旧的solution.php;紧接着又用Redirect 301 /solution.php https://www.abc.or/solar-solutions-in-india.php,把旧URL跳回新URL——这不就来回兜圈子了嘛,浏览器肯定会报重定向过多的错误。
正确的解决方案:用mod_rewrite条件区分请求来源
咱们需要只对用户直接访问旧URL的情况做301重定向,内部重写的请求跳过这个规则,就能避免循环。把你原来的规则替换成下面的代码:
# 仅对用户直接请求solution.php的情况做301重定向 RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /solution\.php\ HTTP/ RewriteRule ^solution\.php$ https://www.abc.or/solar-solutions-in-india.php [R=301,L] # 新URL的内部重写规则保持不变 RewriteRule ^solar-solutions-in-india\.php?$ solution.php [L]
为什么这样能解决问题?
%{THE_REQUEST}变量记录的是用户实际发送的HTTP请求行(比如GET /solution.php HTTP/1.1),只有当用户直接访问旧URL时才会匹配这个条件;而内部重写的请求(也就是从新URL转成旧URL的过程)不会触发这个条件,完美避开了循环。
测试前的注意事项
- 确保你的Apache已经启用了
mod_rewrite模块 - 把规则放在站点根目录的
.htaccess文件里,或者对应的虚拟主机配置中 - 一定要清除浏览器缓存后再测试!因为301重定向会被浏览器缓存,之前的错误缓存可能干扰测试结果
内容的提问来源于stack exchange,提问作者Siddhart hundare
相关产品推荐
相关产品推荐

