.htaccess : Problème url rewriting + redirection

Djazzyman Messages postés 10 Date d'inscription lundi 14 juillet 2008 Statut Membre Dernière intervention 16 mai 2013 - 15 mai 2013 à 13:54
Djazzyman Messages postés 10 Date d'inscription lundi 14 juillet 2008 Statut Membre Dernière intervention 16 mai 2013 - 16 mai 2013 à 14:28
Bonjour à 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 :

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 :

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 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 !
A voir également:

1 réponse

Djazzyman Messages postés 10 Date d'inscription lundi 14 juillet 2008 Statut Membre Dernière intervention 16 mai 2013
16 mai 2013 à 14:28
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 :

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]
0
Rejoignez-nous