Aller au contenu

Sujets conseillés

Posté

Bonjour, j'espere que vous allez pouvoir me sauver, je suis sur ce  problème depuis près de 2 mois maintenant!!

 

j'ai un site multi-lingue et souhaiterais reconduire les utilisateurs en fonction de leur pays, donc de leur IP.

 

J'ai donc mis dans mon fichier .htaccess ces quelques lignes de codes:

 

RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^GB [NC]
RewriteRule ^$ /?lang=uk [L,R=301]

 

RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^CA [NC]
RewriteRule ^$ /?lang=ca [L,R=301]

 

RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^DE [NC]
RewriteRule ^$ /?lang=de [L,R=301]

 

.... etc pour chaque pays, 

 

et évidement ça ne fonctionne pas, j'ai une boucle de redirection, puisque il redirige sans cesse vers ?lang=

 

Au clik sur le choix d'une langue, c'est le menu qui est modifier et qui permet donc de naviguer dans la bonne langue, mais le parametre "lang=" disparait de l'url

 

www.monsite.com/nomdel'article

 

Auriez vous une idée du code à ajouter pour que mes redirections se fassent bien?? 

 

Il faudrait pouvoir dire: une fois l'url réécrite ne plus tenter de la réécrire à nouveau.... mais ça je ne sais pas comment le dire!

 

(je travail sous wordpress)

 

Merci beaucoup!!!!

 

J'attend vos réponses!!!!

Posté

Bonjour,

 

Une règle telle que

RewriteRule ^$ /?lang=uk [L,R=301] 

 

Redirige effectivement vers ?lang=uk.

Mais tu fais quoi ensuite ? Tu utilises des sessions pour rester sur les pages "uk" ?

 

Parce que sans sessions, pas de salut ! Tu ne veux tout de même pas garder ?lang= dans toutes les URLS des pages vues ?

 

 

Posté

Bonjour, 

 

Alors oui eric73,  GEOIP_COUNTRY_CODE retourne un code pays contenant 2 lettres du pays en question.

 

Et pour DAN,  au clik sur le choix d'une langue, c'est le menu qui est modifié et qui permet donc de naviguer au travers du site dans la bonne langue, mais le paramètre "lang=" disparait de l'url et n'est pas retenue ni par un cookie, ni par une session.

 

J'ai essayer 2 solutions hier, qui devrait théoriquement marcher (mais vu la citation de Dan...) ça ne fonctionne pas!

 

Solution1
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^FR   //si IP Francais
RewriteCond %{REQUEST_URI} !(^.$)    // et qu'il n'y a pas de paramettre dans l'URL 
RewriteRule ^$  /?lang=fr [L,R=301]   //Reconduire sur lang=fr

 

Solution2

RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^FR   //si IP Francais
RewriteRule \.info$  /?lang=fr [L,R=301]   //Reconduire, que la home page, vers lang=fr

 

Je ne comprend pas pourquoi ces méthodes ne fonctionnent pas? y a t'il des erreurs de syntaxes?

 

Merci d'avance pour vos réponses!!!

Posté

Je suis peut-être à côté de la plaque, mais dans ton cas est-ce le pays d'origine de l'IP qui compte ou la langue utilisée par le navigateur du visiteur ? En effet, je peux avoir une IP chinoise parce que j'y suis en voyage, mais vouloir consulter un site dans ma langue, par exemple.

 

Du coup j'essaierais de détecter la langue du navigateur qui demande la page en PHP avec

$_SERVER['HTTP_ACCEPT_LANGUAGE']

pour générer la bonne version du site.

 

Il y a sûrement des inconvénients, parce que l'on ne peut pas se fier aux en-têtes, mais ça couvre probablement la majorité des cas, non ?

Posté

pour compléter, dans un fichier .htaccess on doit pouvoir utiliser

RewriteCond %{HTTP:Accept-Language} ^en [NC]
RewriteRule ^$ /en/ [L,R=301]

Mais là c'est Dan le champion ;)

Posté

Il est effectivement plus logique évidement de rediriger le visiteur en fonction de la langue de son navigateur, mais pour des raison complètement indépendante on ne m'a pas laisser le choix de faire autrement!!

 

 

Entre temps j'ai resolue mon problème, la boucle s'arrete grace a la condition de ne pas avoir la variable lang= dans l'url.

 

RewriteEngine on 

RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^FR [NC]
RewriteCond %{QUERY_STRING} !^c=(ca|fr|es|uk|de|it)$ [NC]
RewriteCond %{REQUEST_URI} ^/$ [NC]
RewriteRule ^(.*)$ /fr/?c=fr [L,R=301]

 

Merci a vous en tout cas!!!

 

et bonne fin de soirée!

Posté

C'est bien ce à quoi je faisais allusion dans ma première réponse : tu gardais lang= dans le QUERY_STRING et de ce fait tu bouclais.

 

J'aurais probablement du être plus clair dans ma réponse. :( 

 

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...