smit Posté 7 Janvier 2016 Posté 7 Janvier 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 Posté 8 Janvier 2016 Posté 8 Janvier 2016 est-ce que ENV:GEOIP_COUNTRY_CODE retourne systématiquement un code pays ?
Dan Posté 8 Janvier 2016 Posté 8 Janvier 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 Posté 11 Janvier 2016 Auteur Posté 11 Janvier 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 Posté 12 Janvier 2016 Posté 12 Janvier 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 Posté 12 Janvier 2016 Posté 12 Janvier 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 Posté 12 Janvier 2016 Auteur Posté 12 Janvier 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 Posté 14 Janvier 2016 Posté 14 Janvier 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.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant