.htaccess - Favicon umleiten
Frage
Wie leite ich alle Anfragen für favicon.ico im Wurzelverzeichnis oder in einem Unterverzeichnis auf /images/favicon.ico um
Lösung
Probieren Sie diese Regel aus:
RewriteEngine on
RewriteRule ^favicon\.ico$ /images/favicon.ico [L]
BearbeitenUnd für favicon.ico mit willkürlicher Pfadsegmenttiefe:
RewriteCond $0 !=images/favicon.ico
RewriteRule ^([^/]+/)*favicon\.ico$ /images/favicon.ico [L]
Andere Tipps
Für ein Favicon bei www.mysite.com/images/favicon.ico
Die robusteste Methode wäre:
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]
Erläuterung:
RewriteCond %{REQUEST_URI} !^/images/favicon\.ico [NC]
:
- Stellen Sie sicher, dass die Umleitungsregel nicht gilt, wenn die richtige URI angefordert wird (z. B. eine 301 -Umleitung schreibt den richtigen Favicon -URI in den Browser -Cache - und diese Zeile vermeidet die Verarbeitung der Regel, wenn der Browser die richtige URI fordert).
- [NC] bedeutet, dass es nicht fallsempfindlich ist
RewriteCond %{HTTP_HOST} (.+)
:
- Ruft den HTTP -Hostnamen ab - um die harte Codierung des Hostnamens in die zu vermeiden RewriteRule
- Dies bedeutet, dass Sie Ihre .htaccess-Datei zwischen Lokal-/Testserver und Production Server ohne Probleme kopieren können (oder die Notwendigkeit, Ihre neue URL der Site-Basis in Ihr Umriterieren neu zu streichen).
RewriteRule ^(.*)favicon\.(ico|gif|png|jpe?g)$ http://%1/images/favicon.ico [R=301, L]
:
- ^
ist der Beginn der Regex
- (.*)
ist eine Wildcard -Gruppe - was bedeutet, dass es vor dem Wort Null oder eine beliebige Anzahl von Zeichen geben kann favicon
In der URI (dh dies ist der Teil, mit dem das Root -Verzeichnis oder alle Unterverzeichnisse in die URI -Übereinstimmung aufgenommen werden können)
- \.(ico|gif|png|jpe?g)
Überprüft, ob die URI -Erweiterung einem von einem von entspricht .ico
, .gif
, .png
, .jpg
, .jpeg
- $
ist das Ende der Regex
- http://%1/images/favicon.ico
ist die Umleitungs -URL - und sie injiziert den Hostnamen, den wir in den vorherigen abgerufen haben RewriteCond
. Notiere dass der %1
ist ein genanntes a Umschreiber zurückschreiben Das bedeutet, dass es das letzte ist RewriteCond
Das wurde erfüllt. (z.B %2
wäre der 2. Last RewriteCond
das, um erfüllt worden zu sein)
- R=301
bedeutet, dass es sich um eine dauerhafte Weiterleitung handelt - die die Umleitung im Browser -Cache speichert. Seien Sie vorsichtig beim Testen - Sie müssen den Browser -Cache zwischen Codeänderungen löschen oder die Umleitung wird nicht aktualisiert. Lassen Sie dies wahrscheinlich aus, bis Sie wissen, dass die Regel funktioniert.
- L
bedeutet, dass es die letzte Weiterleitung ist, die darauf befolgt werden soll .htaccess
Datei - Sie benötigen nicht, um die Regel zum Laufen zu bringen, da Zeile 1 nicht erfüllt wird, sobald der Browser an die richtige URL gerichtet ist. Ohne die entweder Zeile 1 oder L
Das Rewriterule führt zu einer dauerhaften Schleife (da die Umleitungs -URL das immer wieder erfüllt RewriteRule
Bedingungen). Es ist jedoch eine gute Idee, das hinzuzufügen L
Wie auch immer, wenn Sie andere Regeln haben, die den Favicon -Regeln gemäß einer Favicon.ICO -Anfrage folgen, können Sie (wahrscheinlich) alle folgenden Regeln ignorieren.
Sie können testen .htaccess
Regeln bei http://htaccess.mwl.be/
Schlussnotiz:
- Achten Sie darauf, dass Sie in einem keine andere Umriteriere haben .htaccess
Datei befindet sich in einem Ihrer Unterverzeichnisse.
- zB, wenn Sie setzen Dies antworte in deinem www.mysite.com/
root-Verzeichnis .htaccess
Datei A RewriteRule (.*) xxx
Geben Sie eine Regel in Ihre ein www.mysite.com/images/
Ordner kann mit den Ergebnissen durcheinander bringen.
RewriteEngine on
RewriteRule ^(.*)favicon\.ico /images/favicon.ico [L]
Ich weiß, dass die Frage markiert ist .htaccess
Aber warum nicht einen Symlink verwenden?
ln -s images/favicon.ico favicon.ico
Dieses schnelle Umschreiben sollte den Trick machen:
RewriteRule ^(.*)favicon.ico /images/favicon.ico