1

重写引擎开启

我有以下代码:

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]

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

我对最后一行代码有疑问。它主要用于所有错误的 url(所有其他的都在前面处理过)。有了这个规则,它开始一遍又一遍地循环,因为所有的 url 都符合这个规则。该规则必须匹配一次或从不匹配,但没有 [END] 我无法设计。我有旧版本的 apache (2.2),所以我不能使用这个方向。

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

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

但不能成功。

4

1 回答 1

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]
于 2012-10-10T15:40:57.063 回答