Apache 2.2 mod重写循环。如何更换[END]

时间:2012-10-10 13:47:53

标签: apache mod-rewrite apache2.2

上的RewriteEngine

我有以下代码:

RewriteCond %{REQUEST_URL} ^$
RewriteRule ^files/(.*)$ getfile.php?file=$1 [L]

RewriteRule  ^(.+)/index([0-9]*).html$ index.php?path=$1/&page=$2 [QSA]
RewriteRule  ^(.+).html$ index.php?path=$1.html [QSA]
RewriteRule  ^(.+)/(.+).htm$ index.php?path=$1/&article=$2.htm [QSA]
RewriteRule  ^(.+/)$ index.php?path=$1 [QSA]

RewriteRule  ^(.+)$ index.php?path=$1 [QSA]

此代码根据情况将网址转换为参数路径和文章。所有好的和坏的url请求都被路由到index.php,文件夹文件/.

中的文件除外

我的最后一行代码有问题。它主要用于所有不良网址(所有其他网址都在之前处理)。使用此规则,它开始反复循环,因为所有url都匹配此规则。这个规则必须匹配一次或从不,但没有[END]我无法设法。我有旧版本的apache(2.2)所以我不能使用这个方向。

我尝试过的解决方法是这样的:

RewriteCond  %{QUERY_STRING} !^.*path=([^&]*).*$
RewriteCond %{REQUEST_URI} !^/((files|design)/.+)$
RewriteRule  ^(.+)$ index.php?path=$1 [QSA]

但不能成功。

1 个答案:

答案 0 :(得分:3)

尝试在每个规则的末尾添加L标记,并在开头添加重定向环境检查,以通过任何以前内部重定向的URI:

RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]

RewriteRule ^files/(.*)$ getfile.php?file=$1 [L]

RewriteRule  ^(.+)/index([0-9]*).html$ index.php?path=$1/&page=$2 [L,QSA]
RewriteRule  ^(.+).html$ index.php?path=$1.html [L,QSA]
RewriteRule  ^(.+)/(.+).htm$ index.php?path=$1/&article=$2.htm [L,QSA]
RewriteRule  ^(.+/)$ index.php?path=$1 [L,QSA]

RewriteRule  ^(.+)$ index.php?path=$1 [L,QSA]