ルートディレクトリまたは任意のサブディレクトリにあるfavicon.icoのすべてのリクエストを/images/favicon.icoにリダイレクトするにはどうすればよいですか?
5 に答える
このルールを試してください:
RewriteEngine on
RewriteRule ^favicon\.ico$ /images/favicon.ico [L]
編集 し、任意のパスセグメントの深さを持つfavicon.icoの場合:
RewriteCond $0 !=images/favicon.ico
RewriteRule ^([^/]+/)*favicon\.ico$ /images/favicon.ico [L]
www.mysite.com/images/favicon.ico
最も堅牢な方法でのファビコンの場合は次のようになります。
RewriteCond %{REQUEST_URI} !^/images/favicon\.ico$ [NC]
RewriteCond %{HTTP_HOST} (.+)
RewriteRule ^(.*)favicon\.(ico|gif|png|jpe?g)$ http://%1/images/favicon.ico [R=301,L,NC]
説明:
RewriteCond %{REQUEST_URI} !^/images/favicon\.ico [NC]
:
-正しいURIが要求された場合にリダイレクトルールが適用されないようにします(たとえば、301リダイレクトは正しいファビコンURIをブラウザキャッシュに書き込みます-この行は、ブラウザが正しいURIを要求した場合にルールの処理を回避します)
-[NC]大文字と小文字を区別しないことを意味します
RewriteCond %{HTTP_HOST} (.+)
:
-httpホスト名を取得します-ホスト名をハードコーディングしないようにしRewriteRule
ます-これは、ローカル/テストサーバーと本番サーバーの間で.htaccessファイルを問題なくコピーできることを意味します(または新しいサイトベースのURLを再ハードコーディングする必要があります)あなたのRewriteRule)
RewriteRule ^(.*)favicon\.(ico|gif|png|jpe?g)$ http://%1/images/favicon.ico [R=301, L]
:
-^
は正規表現の始まりです
-(.*)
はワイルドカードグループです-これは、URIの単語の前にゼロまたは任意の数の文字が存在する可能性があることを意味しますfavicon
(つまり、これはルートディレクトリまたは任意のサブディレクトリを含めることができる部分ですURIの一致)-URI拡張子が、、、、、のいずれかに一致することを確認します-正規
表現の終わりです-
リダイレクトURLです-前に取得したホスト名を挿入し
ます。これはRewriteCond後方参照と呼ばれることに注意してください。これは、これが最後に満たされたことを意味します。(たとえば、最後から2番目になります\.(ico|gif|png|jpe?g)
.ico
.gif
.png
.jpg
.jpeg
$
http://%1/images/favicon.ico
RewriteCond
%1
RewriteCond
%2
RewriteCond
満たされていること)
-R=301
それが永続的なリダイレクトであることを意味します-リダイレクトをブラウザのキャッシュに保存します。テストするときは注意してください。コードを変更する間にブラウザのキャッシュを削除する必要があります。そうしないと、リダイレクトが更新されません。ルールが機能することがわかるまで、おそらくこれを省略してください。
-L
このファイルでたどる最後のリダイレクトを意味し.htaccess
ます-ブラウザが正しいURLに誘導されると、1行目が満たされないため、ルールを機能させるためにこれは必要ありません。1行目またはL
RewriteRuleのいずれかがないと、永続的なループが発生します(リダイレクトURLが条件を満たし続けるためRewriteRule
)。ただし、を追加することをお勧めしますL
とにかく、ファビコンルールに従う他のルールがある場合-favicon.icoリクエストでは、(おそらく)次のルールを無視できます。
.htaccess
ルールはhttp://htaccess.mwl.be/でテストできます
最後の注意: -どのサブディレクトリにも
あるファイルに他のRewriteRuleがないように注意してください。-たとえば、この回答をルートフォルダファイルに
入れると、フォルダ内のタイプルールが結果を台無しにする可能性があります。.htaccess
www.mysite.com/
.htaccess
RewriteRule (.*) xxx
www.mysite.com/images/
RewriteEngine on
RewriteRule ^(.*)favicon\.ico /images/favicon.ico [L]
この簡単な書き直しでうまくいくはずです。
RewriteRule ^(.*)favicon.ico /images/favicon.ico
質問にタグが付けられていることは知って.htaccess
いますが、シンボリックリンクを使用してみませんか?
ln -s images/favicon.ico favicon.ico