Comment rediriger toutes les demandes de favicon.ico dans le répertoire racine ou tout autre sous-répertoire /images/favicon.ico.htaccess - rediriger favicon
Répondre
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]
RewriteEngine on
RewriteRule ^(.*)favicon\.ico /images/favicon.ico [L]
le^devant est très important –
Cela me donne une erreur interne du serveur. Est-il beacause (. *) Favicon.ico correspond également /images/favicon.ico donc il devient une boucle – Tim
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
Cette réécriture rapide devrait faire l'affaire:
RewriteRule ^(.*)favicon.ico /images/favicon.ico
Je sais que la question est marqué .htaccess
mais, pourquoi ne pas utiliser un lien symbolique?
ln -s images/favicon.ico favicon.ico
Parce que je devrais créer un lien symbolique dans chaque répertoire & sous-répertoire sur le site – Tim
Ceci est une solution qui crée du travail au lieu de gagner du temps. – Mateng
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
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.
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