上的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]
但不能成功。
答案 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]