Question

Comment puis-je rediriger toutes les demandes de favicon.ico dans le répertoire racine ou tout autre sous-répertoire /images/favicon.ico

Était-ce utile?

La solution

Essayer 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]

Autres conseils

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 correcte est demandée (par exemple une redirection 301 rédigera le favicon correct URI dans le cache du navigateur - et cette ligne évite le traitement de 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 de coder en dur le nom d'hôte dans le RewriteRule
- cela signifie que vous pouvez copier votre fichier .htaccess entre le serveur local / 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 de caractères avant le mot favicon dans l'URI (ie c'est la partie qui permet le répertoire racine ou les sous-répertoires à inclure dans le match URI)
- vérifie \.(ico|gif|png|jpe?g) 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é un RewriteCond backreference cela signifie qu'il est le dernier RewriteCond qui a été atteint. (Par exemple %2 serait le 2e dernier RewriteCond que d'avoir été remplies)
- R=301 signifie qu'il est une redirection permanente - qui stocke la redirection dans le cache du navigateur. Faites attention lors du test - vous devrez supprimer le cache du navigateur entre les changements de code ou la redirection ne sera pas mise à jour. Probablement laisser ceci jusqu'à ce que vous connaissez les travaux de règle.
- L signifie son dernier redirect à suivre dans ce fichier .htaccess - vous ne aurez pas besoin d'obtenir la règle de travail depuis la ligne 1 ne sera pas atteint une fois que le navigateur est dirigé vers l'URL correcte. Sans l'une ou l'autre ligne 1 ou L la RewriteRule se traduira par une boucle permanente (depuis l'URL de redirection gardera satisfaire les conditions de RewriteRule). Cependant, il 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 - depuis sur une demande favicon.ico, vous pouvez (probablement) ignorer les règles suivantes.

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

Note finale:
- veiller à ce 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 dans votre réponse www.mysite.com/ dossier racine fichier .htaccess, une règle de type RewriteRule (.*) xxx dans votre dossier www.mysite.com/images/ peut gâcher les résultats

RewriteEngine on

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

Je sais que la question est étiquetée .htaccessbut, pourquoi ne pas utiliser un lien symbolique?

ln -s images/favicon.ico favicon.ico

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

RewriteRule ^(.*)favicon.ico /images/favicon.ico
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top