J'ai un gros problème avec GeoIP. Mon site a la structure suivante
J'utilise le module MaxMind GeoIP dans Apache pour rediriger les utilisateurs vers la base de site appropriée de leur pays.
Mon problème est lorsqu'un utilisateur italien visite it.domain.com: s'il veut changer de langue et essayer d'ouvrir www.domain.com, il est redirigé vers it.domain.com. Comment puis-je empêcher la redirection lorsqu'un utilisateur sélectionne une langue?.
Oubliez la géolocalisation - c'est fondamentalement défectueux, comme vous l'avez noté. Les navigateurs envoient un en-tête Accept-Language, vérifiez-le sur votre site www. site et basculer l'utilisateur, une fois, vers la langue qu'il préfère. Sur les sous-domaines, fournissez des liens en langage de modification, mais ne faites aucune vérification.
Je développe des sites multilingues à partir du Japon (lisez: faites-le souvent), ma règle standard .htaccess pour les locuteurs japonais ressemble à ceci:
RewriteCond %{HTTP:Accept-Language} ^ja.*$ [NC]
RewriteCond %{REQUEST_URI} "^/$"
RewriteRule .* http://ja.example.com/ [L,R=301]
RewriteCond %{HTTP:Accept-Language} ^ja.*$ [NC]
RewriteRule .* http://ja.example.com%{REQUEST_URI} [L,R=301]
Et bien sûr, il n'y a pas de base de données à gérer. Les orateurs japonais en vacances au Brésil verront toujours la page en japonais.
J'utiliserais un cookie pour cela sur *.domain.com
. La valeur de cookie spéciale (par exemple, lang
) ne doit être définie que si l'utilisateur clique sur l'un des indicateurs. Maintenant, sur www.domain.com
lors du routage des utilisateurs vers des sites Web localisés, vous devez tout d'abord vérifier si un cookie avec la valeur lang
est défini. Si c'est le cas, vous redirigez vers une page avec lang
spécifié dans le cookie. Si, toutefois, un tel cookie n'existait pas, votre redirection devrait fonctionner normalement.