Pregunta

¿Cómo puedo redirigir todas las peticiones de favicon.ico en el directorio raíz o cualquier subdirectorio a /images/favicon.ico

¿Fue útil?

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 .htaccessbut, 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top