私のhtaccessルールのほとんどは、未署名のユーザーを index.html
.
しかし、私がそれらをリダイレクトするとき index.html
、これらのルールはすべて、そのページでも再実行されます。インデックスファイルにアクセスするユーザーに対して、最小限のルールセットを実行する必要があります。
それは明らかです [L]
htaccessルールの実行を停止します。
この問題のより良い方法は何ですか?これはそれを行う適切な方法ですか、それともより良い推奨事項がありますか?
RewriteCond %{REQUEST_URI} index.html
RewriteRule ^(.*)$ index.html [L]
私の完全なhtaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteCond %{REQUEST_URI} (/onefolder|/secondfolder) [NC]
RewriteCond %{REMOTE_ADDR} !111.22.33.44 [NC]
RewriteCond %{REQUEST_URI} !(index.html) [NC]
RewriteRule ^(.*)$ index.html [F]
RewriteCond %{HTTP_USER_AGENT} oneagent|otheragent [NC]
RewriteCond %{REQUEST_URI} !(index.html) [NC]
RewriteRule ^(.*)$ index.html? [R=301,L]
RewriteCond %{HTTP_USER_AGENT} betteragent|otherbetterganet [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(index.html) [NC]
RewriteRule ^(.*)$ index.html? [R=301,L]
RewriteCond %{HTTP_COOKIE} !username [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(/importantone|/somefolder|index.html) [NC]
RewriteRule ^(.*)$ index.html [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
回答:
回答№1は2できることがいくつかあります。単に書き換えを停止したい場合 index.html
、あなたはあなたの持っているものに似た何かをすることができます(しかし、より簡単です)、あなたの規則の一番上で:
RewriteRule ^/?index.html$ - [L]
ザ -
単に「パススルー」することであり、本質的には書き換えがそこで停止するようにします。
または、これをルールの先頭に追加することにより、ループを完全に防ぐことができます。
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]
同様のことを行いますが、何らかの内部リダイレクトがあったかどうかを確認します。