2012-10-10 30 views
1

RewriteEngine叙述上Apache 2.2 mod重写循环。如何更换[END]

我有以下代码:

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] 

,但不能得逞。

回答

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] 
+0

谢谢你的回答和对不起迟到评论。我很快就会尝试这个(我的工作超负荷)。 它看起来像一个解决方案。 – SlovaN

+0

是的!这行得通!非常感谢你! (不幸的是,我不能投票的答案 - 抱歉) – SlovaN