2

私の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>
4

1 に答える 1

2

あなたができるいくつかのこと。の書き換えを単に停止したい場合index.htmlは、ルールの一番上で、自分が持っているものと同様の(ただしより単純な)ことを行うことができます。

RewriteRule ^/?index.html$ - [L]

これ-は単に「パススルー」することであり、本質的には書き換えがそこで停止するようにします。

または、これをルールの先頭に追加することで、ループを完全に防ぐことができます。

RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]

同様のことを行いますが、何らかの内部リダイレクトがあったかどうかをチェックします。

于 2013-01-30T12:22:45.437 に答える