Question à propos des variables pour les langue du site

Nouveau WRInaute
Bonjour,
Mon site fonctionne comme ça.
Par défaut les visiteur ayant jamais visité le site sont sur la version française,
après avoir choisir l'option de langue une variable fait http://mysite.com/index.php?lang=en
puis il peux naviguer sur le site avec les même url que les autres langues mais avec ça langue choisis.
Ça fonctionne avec des cookies.
Est-ce une bonne méthode pour les moteurs de recherche ?
 
WRInaute accro
Non.

Chaque version (langue) de chaque page doit être accessible par une URL spécifique, donc en général un sous-domaine ou un sous-dossier.

Jacques.
 
Nouveau WRInaute
Merci beaucoup
Je pense que faire des sous domaine comme en.monsite.com, es.monsite.com soit plus compliqué
Pas vrai ?
Donc je vais plutôt faire comme ceci monsite.com/en, monsite.com/es...
Mais j'ai une question
Quand je tape mon url : monsite.com/en/ l'url du serveur est celle-ci monsite.com/?lang=en
Mais si je tape monsite.com/en/article/ l'url du serveur est monsite.com/article/?lang=en
même chose pour monsite.com/fr/blog l'url du serveur est : monsite.com/blog/?lang=en etc...

Comment puis-je faire cela
Avez-vous une idée ?
 
WRInaute accro
C'est un tout petit peu plus compliqué d'utiliser des sous-domaines, mais pas tellement plus. Pour ça il faut que:
- tu ajoutes les sous-domaines à la zone DNS, et qu'ils pointent sur ton serveur (ou que tu utilises un wildcard)
- ton serveur reconnaisse tous ces sous-domaines et les envoie tous au même endroit, ce qui dépend beaucoup de ton hébergement
- ensuite avec du rewriting ça va faire quelque chose comme:
Code:
RewriteCond %{HTTP_HOST} ^(..).exemple.com$ [NC]
RewriteRule (.*) $1?lang=%1
(pas testé, mais ça ne doit pas être très loin)

Alternativement, tu peux tout simplement dans ton script php récupérer la valeur de $_SERVER['HTTP_HOST'], et à l'aide d'un preg_match par exemple, en déduire la langue. Genre à l'heure actuelle tu fais:
Code:
$lang = $_GET['lang'];
Et à la place tu fais:
Code:
preg_match('/^(..).exemple.com/i',$_SERVER['HTTP_HOST'],&$matches);
$lang=$matches[1];
(pas testé non plus)

Evidemment il faut gérer le cas par défaut (si la langue n'est pas reconnue, en particulier si c'est www...).

Avec des sous-dossiers, c'est effectivement plus simple, puisque ceci devrait suffire:
Code:
RewriteRule ^(..)/(.*) /$2?lang=$1 [QSA]
(encore une fois, pas testé)

Jacques.
 
Discussions similaires
Haut