.htaccess - reindirizzare favicon
Domanda
Come faccio a reindirizzare tutte le richieste per favicon.ico nella directory principale o qualsiasi sottodirectory per /images/favicon.ico
Soluzione
Prova questa regola:
RewriteEngine on
RewriteRule ^favicon\.ico$ /images/favicon.ico [L]
Modifica e per favicon.ico con arbitraria profondità segmento del percorso:
RewriteCond $0 !=images/favicon.ico
RewriteRule ^([^/]+/)*favicon\.ico$ /images/favicon.ico [L]
Altri suggerimenti
Per una favicon ad www.mysite.com/images/favicon.ico
il metodo più affidabile potrebbe essere:
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]
Spiegazione:
RewriteCond %{REQUEST_URI} !^/images/favicon\.ico [NC]
:
- assicura che la regola di reindirizzamento NON si applica se è richiesto il corretto URI (ad esempio, un redirect 301 scriverà il corretto favicon URI cache del browser - e questa linea evita l'elaborazione della regola se il browser richiede il corretto URI)
- [NC] significa che non è tra maiuscole e minuscole
RewriteCond %{HTTP_HOST} (.+)
:
- recupera il nome host http - per evitare di difficile codifica il nome host nella RewriteRule
- questo significa che è possibile copiare il file .htaccess tra server locale / test e server di produzione senza problemi (o la necessità di ri-codificare il nuovo URL di base sito nel vostro RewriteRule)
RewriteRule ^(.*)favicon\.(ico|gif|png|jpe?g)$ http://%1/images/favicon.ico [R=301, L]
:
- ^
è l'inizio della
regex
- (.*)
è un gruppo jolly - il che significa che non ci può essere zero o un numero qualsiasi di caratteri prima della parola favicon
in notazione URI (cioè questa è la parte che permette directory principale o tutte le sottodirectory da includere nella partita URI)
- controlli \.(ico|gif|png|jpe?g)
che l'estensione URI corrisponde a una delle .ico
, .gif
, .png
, .jpg
, .jpeg
- $
è la fine della
regex
- http://%1/images/favicon.ico
è l'URL di reindirizzamento - e si inietta il nome host abbiamo recuperato nel RewriteCond
precedente. Si noti che il %1
è una chiamata RewriteCond backreference questo significa che è l'ultima RewriteCond
che è stato raggiunto. (Ad esempio %2
sarebbe il 2 °-last RewriteCond
che sia soddisfatta)
- R=301
significa che è un redirect permanente - che memorizza il reindirizzamento nella cache del browser. Fare attenzione quando si verifica - è necessario eliminare la cache del browser tra i cambiamenti di codice o il reindirizzamento non aggiornerà. Probabilmente lasciare questo fuori fino a quando si conoscono i lavori di regole.
- L
significa che la sua l'ultima reindirizzamento da seguire in questo file .htaccess
- non sarà necessario questo per ottenere la regola di lavoro dal momento che la linea 1 non sarà raggiunto una volta che il browser viene indirizzato alla URL corretto. Senza la linea 1 sia o L
il RewriteRule si tradurrà in un ciclo fisso (poiché il reindirizzamento manterrà soddisfare le condizioni RewriteRule
). Tuttavia, è una buona idea aggiungere il L
in ogni caso se avete altre regole seguenti regole favicon - dal momento che su una richiesta favicon.ico, è possibile (probabilmente) ignorare qualsiasi seguenti regole.
È possibile verificare le regole .htaccess
a http://htaccess.mwl.be/
Nota finale:
- fare attenzione a che non si dispone di qualsiasi altra RewriteRule in un file .htaccess
situato in uno dei tuoi sottodirectory
.
-. Ad esempio, se si mette questo risposta nel file www.mysite.com/
cartella principale .htaccess
, un tipo di regola RewriteRule (.*) xxx
nella cartella www.mysite.com/images/
può pasticciare con i risultati
RewriteEngine on
RewriteRule ^(.*)favicon\.ico /images/favicon.ico [L]
So che la questione è aggiunto .htaccess
but, perché non usare un link simbolico?
ln -s images/favicon.ico favicon.ico
Questo rapido riscrittura dovrebbe fare il trucco:
RewriteRule ^(.*)favicon.ico /images/favicon.ico