smit Posted January 7, 2016 Posted January 7, 2016 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!!!!
eric73 Posted January 8, 2016 Posted January 8, 2016 est-ce que ENV:GEOIP_COUNTRY_CODE retourne systématiquement un code pays ?
Dan Posted January 8, 2016 Posted January 8, 2016 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 ?
smit Posted January 11, 2016 Author Posted January 11, 2016 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!!!
Clair de Lune Posted January 12, 2016 Posted January 12, 2016 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 ?
Clair de Lune Posted January 12, 2016 Posted January 12, 2016 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
smit Posted January 12, 2016 Author Posted January 12, 2016 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!
Dan Posted January 14, 2016 Posted January 14, 2016 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.
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now