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]
しかし成功できません。