Domanda

Come faccio a reindirizzare tutte le richieste per favicon.ico nella directory principale o qualsiasi sottodirectory per /images/favicon.ico

È stato utile?

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 .htaccessbut, 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top