重写规则超出内部重定向限制

时间:2015-10-02 15:51:08

标签: .htaccess mod-rewrite url-rewriting friendly-url

我的网站上最多可以接受四个参数,因此我已将以下内容添加到我的.htaccess中。

RewriteEngine On
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)$ /index.php?atr=$1&dir=$2&query=$3&lookup=$4 [L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ /index.php?atr=$1&dir=$2&query=$3 [L]
RewriteRule ^([^/]*)/([^/]*)$ /index.php?atr=$1&dir=$2 [L]

RewriteRule ^([^/]*)$ /index.php?atr=$1 [L]

一切正常,直到我添加第五行才允许只有一个参数。这将在index.php的所有实例中返回500个错误,错误为:

Request exceeded the limit of 10 internal redirects

1 个答案:

答案 0 :(得分:0)

第4条规则会发生什么:

RewriteRule ^([^/]*)$ /index.php?atr=$1 [L]

这也与重定向/重写的URL匹配。所以,你会得到类似的东西:

http://host/index.php?atr=index.php%3Fatr=index.php%3Fatr=index.php%3Fatr=index.php%3Fatr=index.php

这是重定向循环。要解决此问题,只需使用一个否定匹配index.php本身的模式。

RewriteRule ^((?!index\.php)[^/]*)$ /index.php?atr=$1 [L]