Apache URL重写规则异常:访问指定URL陷入无限循环求助
嘿,我来帮你揪出这个无限循环的问题!你遇到的URL不断重复pagename的情况,肯定是重写规则的配置出了疏漏,导致Apache一直在重复执行重写操作,停不下来。
先给你正确的配置方案
要实现「访问/pagename时显示/index.php内容,URL保持不变」的需求,正确的Apache重写规则应该是这样的:
RewriteEngine On # 精确匹配/pagename路径,内部转发到/index.php RewriteRule ^pagename$ /index.php [L]
你的配置可能犯了这些错
咱们来逐个排查常见的坑:
- 没加路径锚定符
^和$:如果你的规则写成了RewriteRule pagename index.php(没有开头和结尾的锚定),那任何包含pagename字符串的路径都会被匹配——比如重写后的请求如果间接带了pagename,就会被反复重写,导致路径不断追加。 - 用了相对路径而非绝对路径:如果写成
RewriteRule ^pagename$ index.php,又没设置RewriteBase /,Apache会把重写后的路径和原路径拼接成/pagename/index.php,要是这个新路径又被宽泛的规则匹配,就会陷入循环。 - 错误加了重定向标志
[R]:[R]会让浏览器跳转到新URL,而不是内部转发内容。如果规则不小心重定向到了带pagename的路径,浏览器就会不断跳转,URL里的pagename也就越堆越多。 - 漏了
[L]标志:[L]是告诉Apache「这条规则处理完就停,别管后面的了」,没加的话可能会触发其他规则,引发意外的循环。
另外,要是你在.htaccess里配置,得确保所在目录的AllowOverride设置成All或者包含FileInfo,不然重写规则根本不会生效。测试前记得清一下浏览器缓存,避免之前的错误重定向缓存干扰结果哦!
内容的提问来源于stack exchange,提问作者user447255
相关产品推荐
相关产品推荐

