mod_rewrite regex übereinstimmen, nur, wenn eine bestimmte Zeichenfolge NICHT vorhanden ist
Suchen durch meinen server-logs sehe ich, dass viele Seiten auf meiner Website anfordern favicon.ico
, favicon.jpg
, favicon.png
usw in einer Vielzahl von verschiedenen Verzeichnissen.
Statt waten durch jede Seite, um zu versuchen, herauszufinden, wo jede falsche Anfrage kommt, Schreibe ich einige apache-redirect-Regeln zu ändern, eine Anfrage für eine url mit "favicon"
Umleitung zu /favicon.ico
Meine erste naive Versuch war dieser:
RewriteRule favicon /favicon.ico [R=301,L]
Aber das bedeutete, dass, wenn Sie tatsächlich angefordert /favicon.ico
es senden würde, der Sie in einen endlosen redirect-Schleife.
Im Grunde, was ich denke, brauche ich eine regex, die diese Wirkung haben:
| Request | Response |
|------------------------ | --------------|
| favicon.png | /favicon.ico |
| directory/favicon.png | /favicon.ico |
| directory/favicon.ico | /favicon.ico |
| favicon.ico | <no match> |
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, diese
Paar änderungen würde ich vorschlagen zu ändern Alex ausgezeichnete Antwort:
Halten Sie in diesem Abschnitt die gleichen:
Check für mehr als nur das .ico-Erweiterung am Ende der Anfrage:
Fügen Sie eine 3. Bedingung ist, der packt das aktuelle Anfrage-host-name:
Schließlich ändern Sie die Letzte RewriteRule verwenden ein %1 (ein Rückverweis mit der Darstellung des jüngsten abgestimmt Zustand):
Das endgültige Ergebnis Aussehen würde:
Hoffe, das jemand hilft...
RewriteRule (.*) http://%1/favicon.ico [R=301,L]
da die%1
ist einbackreference
- in anderen Worten%1
geben die letzten übereinstimmenden RewriteRule während%3
geben wird, die Dritte-die Letzte passende RewriteCond (das ist in diesem Fall ist die erste RewriteCond und kann nicht einmal ein 'gruppiert Teil") - siehe httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecondAus der Spitze von meinem Kopf:
Ich würde diese Regel verwenden: