我有一个.htaccess文件,当我输入www.example.com/demo/index.php时,它会将我重定向到一个循环中。我真的很困惑为什么会这样。
# Do not remove this line, otherwise mod_rewrite rules will stop working
RewriteBase /
Options +Multiviews
AddHandler application/x-httpd-php .css
AddHandler application/x-httpd-php .js
RewriteEngine On
#NC not case sensitive
#L last rule don't process futher
#R 301 changes the url to what you want
RewriteRule ^demo(.*)$ finished$1 [NC]
RewriteCond %{REQUEST_URI} ^/finished/.*$
RewriteRule ^finished/(.*)$ demo/$1 [NC,R=301,L]
答案 0 :(得分:1)
如果你这样做,我可以看到重写循环发生:
http://mydomain/demo/rewrite.cgi
因为第一条规则将重写为
http://mydomain/finished/rewrite.cgi
然后匹配第二次重写规则的重写条件并重写为:
http://mydomain/demo/rewrite.cgi
然后你的循环就开始了。
这里可能有两个修复:a)将L
标志添加到第一个重写规则
(使它成为将要发生的最后一次重写)或者b)如果您的演示重写后面没有斜线,我会隐藏它:
RewriteRule ^demo([^/]+)$ finished$1 [NC]
另一个选项如果不是原因,则打开重写规则记录并查看 正在做什么来创建循环:
RewriteLog /path/to/rewrite.log
RewriteLogLevel 3