[URL rewriting] Rediriger les anciennes URL vers les nouvelles pour éviter le duplicate content Google
Bonsoir à toutes et à tous,
J'ai récemment souhaité réécrire les urls de mon site, et j'ai commencé par la gestion multilingue. Pour transformer une url de type :
www.monsite.com/contact.php?langue=fr
en :
www.monsite.com/fr/contact
j'ai modifié mon fichier .htaccess de la manière suivante :
Code:
1 2 3 4
| Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteRule ^(fr|en)/(.*) $2.php?langue=$1 [QSA,L] |
Jusque là, pas de problème, tout fonctionne
Seulement, mon site a des références dans les résultats de recherche de Google, Yahoo et Bing. Pour éviter les contenus dupliqués, sanctionnés par Google, il me faut donc rediriger ces anciennes adresses (de type www.monsite.com/script.php?langue=fr) vers les nouvelles (de type www.monsite.com/langue/script). J'ai donc à nouveau modifié mon .htaccess de la manière suivante :
Code:
1 2 3 4 5 6 7 8
| Options +FollowSymlinks
RewriteEngine On
RewriteBase /
# Réécriture qui était OK
RewriteRule ^(fr|en)/(.*) $2.php?langue=$1 [QSA,L]
# Redirection 301 : pb
RewriteCond %{QUERY_STRING} langue=(fr|en)
RewriteRule ^(.*)\.php http://www.monsite.com/%1/$1? [R=301,L] |
Et là, plus rien ne fonctionne !!! Que je clique sur un lien de mon site ou un lien Google vers mon site, la barre d'adresse indique correctement l'url réécrite dans Firefox, mais j'obtiens le message d'erreur suivant :
" La page n'est pas redirigée correctement
Firefox a détecté que le serveur redirige la demande pour cette adresse d'une manière qui n'aboutira pas. "
Jusqu'à peu, je faisais des .htaccess basiques et j'ai du récupérer des infos un peu partout - y compris sur developpez.com - pour commencer à comprendre un peu mieux les RewriteRule.
Mais là, je bloque. Deux jours que je m'arrache les cheveux sur ce problème.
Pour ne pas devenir chauve, j'ai préféré faire ce post, en espérant que quelqu'un pourra m'aider !
[URL rewriting] .htaccess : empêcher une boucle sans fin de redrection
Merci Mac (Giver ?) de t'être intéressé à mon problème !!!
Mais n'ayant pas consulté ta réponse, j'ai continué à chercher sur Internet et je me suis rendu compte que les règles de réécriture de mon fichier .htaccess bouclaient sans fin.
J'ai trouvé une solution en consultant les pages suivantes :
- Utilisation d'un paramètre internal_redirect (qui pourrait s'appeler "choucroute", cela n'a pas d'incidence) pour stopper la boucle :
Voir la page
- Et surtout une explication claire et précise. Utilisation d'un paramètre stop (peu importe le nom) pour stopper la boucle :
Voir la page
Du coup, pour celles et ceux qui sont intéressés par cette discussion, voici le fichier .htaccess corrigé qui fonctionne :
Code:
1 2 3 4 5 6 7
| Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteRule ^(fr|en)/(.*) $2.php?langue=$1&stop=true [QSA,L]
RewriteCond %{QUERY_STRING} !stop=true
RewriteCond %{QUERY_STRING} langue=(fr|en)
RewriteRule ^(.*)\.php http://www.monsite.com/%1/$1? [R=301,L] |
Merci encore à toi, Mac : si j'avais consulté ta réponse plus tôt, cela m'aurait évité de m'arracher quelques cheveux de plus !