2010-03-09 11 views

Répondre

21

Essayez cette règle:

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

Modifier Et pour favicon.ico avec la profondeur de segment de chemin arbitraire:

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

Cela fonctionne pour /favicon.ico mais pas pour /folder/favicon.ico Certains navigateurs sont demander favicon.ico dans le dossier local même si elle est spécifiée comme /images/favicon.ico donc je voulais rediriger les demandes actuellement défaillantes à l'emplacement correct – Tim

3
RewriteEngine on 

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

le^devant est très important –

+2

Cela me donne une erreur interne du serveur. Est-il beacause (. *) Favicon.ico correspond également /images/favicon.ico donc il devient une boucle – Tim

+0

Vérifié le journal des erreurs et il indique "Demande dépassé la limite de 10 redirections internes en raison d'une erreur de configuration probable" donc on dirait est en effet en train de se rediriger vers lui-même. Comment puis-je contourner cela? – Tim

0

Cette réécriture rapide devrait faire l'affaire:

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

Je sais que la question est marqué .htaccess mais, pourquoi ne pas utiliser un lien symbolique?

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

Parce que je devrais créer un lien symbolique dans chaque répertoire & sous-répertoire sur le site – Tim

+0

Ceci est une solution qui crée du travail au lieu de gagner du temps. – Mateng

+0

Si le serveur cherche favicon.ico à la racine et vous ne pouvez pas l'avoir là, un lien symbolique ferait ... Je vais implémenter ceci maintenant (pour ne pas être lié à Apache) mais si c'est nécessaire faire sur une base par répertoire alors peut-être il est temps de reconsidérer la configuration ... – Alastair

1

Pour un favicon à www.mysite.com/images/favicon.ico la méthode la plus robuste serait:

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] 

Explication:

RewriteCond %{REQUEST_URI} !^/images/favicon\.ico [NC]:
- veille à ce que la règle de redirection ne s'applique pas si l'URI correct est demandé (par exemple une redirection 301 écrira l'URI favicon correcte dans le cache du navigateur - et cette ligne évite de traiter la règle si le navigateur demande l'URI correct)
- [NC] signifie qu'il est insensible à la casse

RewriteCond %{HTTP_HOST} (.+):
- récupère le nom d'hôte http - pour éviter coder en dur le nom d'hôte dans le RewriteRule
- cela signifie que vous pouvez copier votre fichier .htaccess entre le niveau local/serveur de test et le serveur de production sans problèmes (ou la nécessité de re-coder en dur votre nouvelle URL de base du site dans votre RewriteRule)

RewriteRule ^(.*)favicon\.(ico|gif|png|jpe?g)$ http://%1/images/favicon.ico [R=301, L]:
- ^ est le début de la regex
- (.*) est un groupe générique - ce qui signifie qu'il peut y avoir zéro ou un nombre quelconque de caractères avant le mot favicon dans l'URI (c'est-à-dire la partie qui permet au répertoire racine ou aux sous-répertoires d'être inclus dans le match). vérifie que l'extension de l'URI correspond à l'une .ico, .gif, .png, .jpg, .jpeg
- $ est la fin de la regex
- http://%1/images/favicon.ico est l'URL de redirection - et il injecte le nom d'hôte nous avons récupéré dans la RewriteCond précédente. Notez que le %1 est appelé RewriteCond backreference, ce qui signifie que c'est le dernier RewriteCond qui a été atteint. (par exemple, %2 serait le 2ème en dernier RewriteCond à avoir été atteint)
- R=301 signifie qu'il s'agit d'une redirection permanente - qui stocke la redirection dans le cache du navigateur. Soyez prudent lors des tests - vous devez supprimer le cache du navigateur entre les changements de code ou la redirection ne sera pas mise à jour. Probablement laisser ceci dehors jusqu'à ce que vous sachiez que la règle fonctionne.
- L signifie que c'est la dernière redirection à suivre dans ce fichier .htaccess - vous n'aurez pas besoin de cela pour faire fonctionner la règle puisque la ligne 1 ne sera pas respectée une fois que le navigateur est dirigé vers l'adresse correcte. Sans la ligne 1 ou L le RewriteRule se traduira par une boucle permanente (puisque l'URL de redirection continuera à satisfaire les conditions RewriteRule). Cependant, c'est une bonne idée d'ajouter le L de toute façon si vous avez d'autres règles suivant les règles de favicon - puisque sur une demande favicon.ico, vous pouvez (probablement) ignorer les règles suivantes.

Vous pouvez tester .htaccess règles à http://htaccess.mwl.be/

Note finale:
- faites attention que vous n'avez pas d'autre RewriteRule dans un fichier .htaccess situé dans l'un de vos sous-répertoires.
- par exemple si vous mettez cette réponse dans votre www.mysite.com/ dossier racine fichier .htaccess, une règle de type RewriteRule (.*) xxx dans votre mess peut www.mysite.com/images/ dossier avec les résultats.