.htaccess - redirigir favicon
Pregunta
¿Cómo puedo redirigir todas las peticiones de favicon.ico en el directorio raíz o cualquier subdirectorio a /images/favicon.ico
Solución
Trate de esta regla:
RewriteEngine on
RewriteRule ^favicon\.ico$ /images/favicon.ico [L]
Editar Y para favicon.ico con la profundidad segmento de trayectoria arbitraria:
RewriteCond $0 !=images/favicon.ico
RewriteRule ^([^/]+/)*favicon\.ico$ /images/favicon.ico [L]
Otros consejos
Para un favicon en www.mysite.com/images/favicon.ico
el método más robusto sería:
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]
Explicación:
RewriteCond %{REQUEST_URI} !^/images/favicon\.ico [NC]
:
- asegura que la regla de redirección no se aplica si se solicita el URI correcto (por ejemplo, una redirección 301 escribirá el favicon correcta URI a la caché del navegador - y esta línea evita el procesamiento de la regla si el navegador solicita la correcta URI)
- [NC] significa que no es sensible a mayúsculas
RewriteCond %{HTTP_HOST} (.+)
:
- recupera el nombre de host http - para evitar codificar duro el nombre de host en el RewriteRule
- esto significa que se puede copiar el archivo .htaccess entre el servidor local / servidor de prueba y producción sin problemas (o la necesidad de volver a codificar el nuevo URL base en su sitio RewriteRule)
RewriteRule ^(.*)favicon\.(ico|gif|png|jpe?g)$ http://%1/images/favicon.ico [R=301, L]
:
- ^
es el comienzo de la expresión regular
- (.*)
es un grupo comodín - lo que significa que no puede haber cero o cualquier número de caracteres antes de la palabra favicon
en el URI (es decir, esta es la parte que permite el directorio raíz o cualquier subdirectorio que se incluirán en el partido URI)
- controles \.(ico|gif|png|jpe?g)
que la extensión URI coincide con cualquiera de .ico
, .gif
, .png
, .jpg
, .jpeg
- $
es el final de la expresión regular
- http://%1/images/favicon.ico
es la URL de redireccionamiento - e inyecta el nombre de host se recuperaron en el RewriteCond
anterior. Tenga en cuenta que la %1
es un llamado RewriteCond retrorreferencia esto significa que es el último RewriteCond
que se ha cumplido. (Por ejemplo %2
sería la segunda último RewriteCond
que haberse cumplido)
- R=301
significa que es una redirección permanente - que almacena la redirección en la memoria caché del navegador. Tenga cuidado cuando se prueba - se necesita para borrar la caché del navegador entre los cambios de código o la redirección no se actualiza. Probablemente no incluya este campo hasta que conozca las obras de reglas.
- L
significa que es el último redirección a seguir en este archivo .htaccess
- no necesitará esto para conseguir la regla de trabajo desde la línea 1 no se cumplirá una vez que el navegador se dirige a la URL correcta. Sin la cualquiera de las líneas 1 o L
la RewriteRule resultará en un bucle permanente (ya que el URL de redireccionamiento mantendrá que satisface las condiciones RewriteRule
). Sin embargo, es una buena idea añadir el L
todos modos si tiene otras reglas siguientes las reglas favicon - puesto sobre una solicitud favicon.ico, puede (probablemente) ignorar las reglas siguientes.
Puede probar reglas .htaccess
en http://htaccess.mwl.be/
Nota final:
- tener cuidado de que no tiene ninguna otra RewriteRule en un fichero .htaccess
situado en cualquiera de sus subdirectorios
.
-., Por ejemplo si se pone este respuesta en su archivo www.mysite.com/
carpeta raíz .htaccess
, un tipo de regla RewriteRule (.*) xxx
en su carpeta www.mysite.com/images/
puede meterse con los resultados
RewriteEngine on
RewriteRule ^(.*)favicon\.ico /images/favicon.ico [L]
Sé que la pregunta se marca .htaccess
but, por qué no utilizar un enlace simbólico?
ln -s images/favicon.ico favicon.ico
Esta reescritura rápida debe hacer el truco:
RewriteRule ^(.*)favicon.ico /images/favicon.ico