1

RewriteEngine on

私は次のコードを持っています:

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 をパラメーター パスと記事に変換します。フォルダー files/ 内のファイルを除いて、すべての良い URL 要求と悪い URL 要求は index.php にルーティングされます。

コードの最後の行に問題があります。これは主にすべての不正な URL を対象としています (他のすべての URL は以前に処理されます)。このルールでは、すべての URL がこのルールに一致するため、何度もループし始めます。このルールは 1 回一致するか、またはまったく一致しない必要がありますが、[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 に答える