2010-03-09 50 views

Respuesta

21

Pruebe esta regla:

RewriteEngine on 
RewriteRule ^favicon\.ico$ /images/favicon.ico [L] 

Editar Y para favicon.ico con la profundidad segmento de trazado arbitrario:

RewriteCond $0 !=images/favicon.ico 
RewriteRule ^([^/]+/)*favicon\.ico$ /images/favicon.ico [L] 
+0

Esto funciona para /favicon.ico pero no para /folder/favicon.ico Algunos navegadores son solicitando favicon.ico en la carpeta local a pesar de que está especificado como /images/favicon.ico, así que quise redirigir las solicitudes actualmente defectuosas a la ubicación correcta – Tim

3
RewriteEngine on 

RewriteRule ^(.*)favicon\.ico /images/favicon.ico [L] 
+1

^delante es muy importante –

+2

Esto me está dando un error interno del servidor. ¿Es beacause (. *) Favicon.ico también coincide con /images/favicon.ico por lo que se convierte en un bucle – Tim

+0

Registro de errores revisado y dice "La solicitud excedió el límite de 10 redirecciones internas debido a un probable error de configuración" así que parece de hecho está redirigiendo a sí mismo. ¿Cómo puedo evitar eso? – Tim

0

Esta reescritura rápida debe hacer el truco:

RewriteRule ^(.*)favicon.ico /images/favicon.ico 
-1

Sé que la pregunta se marca .htaccess pero, por qué no utilizar un enlace simbólico?

ln -s images/favicon.ico favicon.ico 
+1

porque entonces tendría que crear un enlace simbólico en cada directorio y subdirectorio en el sitio – Tim

+0

Esta es una solución que crea trabajo en lugar de ahorrar tiempo. – Mateng

+0

Si el servidor está buscando favicon.ico en la raíz y no puede tenerlo allí, un enlace simbólico haría ... Voy a implementar esto ahora (para no estar vinculado a Apache) pero si necesita haciendo por directorio, quizás sea hora de reconsiderar la configuración ... – Alastair

1

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 el URI correcto se solicita (por ejemplo, un redireccionamiento 301 escribirá el URI de favicon correcto en el caché del navegador, y esta línea evita el procesamiento de la regla si el navegador solicita el URI correcto)
- [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 lo local/servidor de prueba y el servidor de 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 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 incluir el directorio raíz o cualquier subdirectorio en el URI)
- \.(ico|gif|png|jpe?g) comprueba 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 redirección - e inyecta el nombre de host se recuperaron en el anterior RewriteCond. Tenga en cuenta que el %1 se llama RewriteCond backreference, lo que significa que es el último RewriteCond que se ha cumplido. (por ejemplo, %2 sería el 2do. último RewriteCond que se ha cumplido)
- R=301 significa que es un redireccionamiento permanente, que almacena el redireccionamiento en el caché del navegador. Tenga cuidado al probar: deberá eliminar la memoria caché del navegador entre cambios de código o la redirección no se actualizará. Probablemente dejes esto hasta que sepas que la regla funciona.
- L es la última redirección que se debe seguir en este archivo .htaccess; no será necesario para que la regla funcione, ya que la línea 1 no se cumplirá una vez que el navegador se dirija a la URL correcta. Sin la línea 1 o L, RewriteRule dará como resultado un bucle permanente (dado que la URL de redirección seguirá cumpliendo las condiciones de RewriteRule). Sin embargo, es una buena idea agregar el L de todos modos si tiene otras reglas que siguen las reglas de favicon, ya que en una solicitud de favicon.ico, puede (probablemente) ignorar las siguientes reglas.

Puede probar .htaccess reglas en http://htaccess.mwl.be/

final Nota:
- tener cuidado de que no tiene ninguna otra RewriteRule en un fichero .htaccess situado en cualquiera de sus subdirectorios.
- por ejemplo, si se pone esta respuesta en su archivo www.mysite.com/ carpeta raíz .htaccess, una regla RewriteRule (.*) xxx tipo en su www.mysite.com/images/ carpeta puede meterse con los resultados.

Cuestiones relacionadas