mod_rewrite无缘无故地更改地址栏

时间:2013-05-03 04:45:55

标签: php apache .htaccess redirect environment-variables

我有一个.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]

1 个答案:

答案 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