8768 sujets

Développement web côté serveur, CMS

Bonjour !

Je me permets de vous demander de l'aide suite à un arrachage de cheveux depuis quelques jours...

J'ai mis en place un site web multilingue (français et anglais pour le moment).

Actuellement, le langage est pris en compte selon des variables de session (GET) de ce type : http://www.example.com/fr/index.php?lang=fr

Afin de faire quelque chose de carré d'un point de vue SEO, j'ai opté pour un URL Rewriting par sous-dossiers pour avoir des url de ce type : http://www.example.com/fr/index.php

Le site interprète bien ces nouvelles URL grâce à la règle .htaccess suivante :

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(fr|en)/(.*)$ $2?lang=$1 [L,QSA]


Jusqu'ici pas de problèmes, mise à part que si quelqu'un arrive sur le site en tapant uniquement le nom de domaine http://www.example.com, il faut que je force une redirection vers une langue : http://www.example.com/xx/ (xx représentant ici fr ou en) afin de ne pas avoir une troisième alternative d'URL mais uniquement deux pour deux langues.

J'ai donc rajouté la règle suivante :

# Si langage FR détecté, alors forcer sur /fr/
RewriteCond %{HTTP:Accept-Language} ^fr [NC]
RewriteRule ^$ /fr/index.php [L,R=301]
# Pour tout autre langage détecté, alors forcer sur /en/
RewriteRule ^$ /en/index.php [L,R=301]


Ca à l'air de fonctionner, seulement qu'on arrive sur la page d'accueil ou via une autre URL, la redirection se fera tout le temps sur la page d'accueil (index.php) et non pas selon la page en cours.

J'ai testé en ne précisant pas index.php mais, surement dû à la première règle cela me donne : http://www.example.com/fr/?lang=fr&lang=fr&lang=fr&lang=fr&lang=fr...

Auriez-vous une idée pour pallier le problème ?
Un grand merci d'avance pour vos réponses ! Smiley biggrin
Modifié par salvia34 (21 May 2013 - 17:52)
je ne vois pas où est le problème, je conçoi un site bilingue français-anglais

depuis la page d'acceuil <.index> l'internaute peut choisir une des deux langues, les rare texte (les titres) sont dans les deux langues sans qu'il y ait un problème de place

ensuite, en cliquant sur l'un des deux drapeaux l'internaute voit affiché une page <.francais> ou <.anglais> quasiment identique en français ou anglais selon le drapeau cliqué, les titres et les détails liés sont alors tous en français ou tous en anglais, l'internaute a alors l'impression d'être toujours dans la page d'acceuil

dans les pages francophone du site, un lien affiché ACCEUIL est proposé vers la page <.francais>, l'internaute surf au sein du site en retournant toujours vers la page d'acceuil francophone, idème avec les pages anglophone (retour vers la page <.anglais>)
Bonjour,

J'ai un site multilingue qui fonctionne sur le même principe, et je n'ai aucun problème.

deux pistes à explorer :

1: essayer cette règle
RewriteRule ^(fr|en)/(.+)$ $2?lang=$1 [L,QSA]

2. OU alors éviter la redirection et déterminer la langue à retourner uniquement en php avec $_SERVER['HTTP_ACCEPT_LANGUAGE']; c'est en fait ce que j'utilise et ça n'a pas l'air de trop gêner le référencement.