I have a big problem with GeoIP. My website has the following structure

  • www.domain.com
  • it.domain.com
  • de.domain.com

I use the MaxMind GeoIP module in Apache to redirect users to the appropriate site base on their country.

My problem is when a user from Italy visits it.domain.com: if ge wants to change language and try to open www.domain.com, he is redirected back to it.domain.com. How can I prevent redirection when a user selects a language.


Forget geolocation - it's fundamentally flawed as you have noted. Browsers send an Accept-Language header, check that on your www. site and flip the user, once, to the language they say they prefer. On the subdomains, provide change-language links but do not do any checks.

I develop multi-lingual sites from Japan (read: do this a lot), my standard .htaccess rule for Japanese speakers looks like this:

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]

And of course there's no database to deal with. Japanese speakers on vacation in Brazil will still see the page in Japanese.

| improve this answer | |

I would use cookie for this on *.domain.com. Special cookie value (let's say lang) should only be set if user clicks on any of the flags. Now on www.domain.com when routing users to localized websites you first check if cookie with lang value is set, if so, you redirect to a page with lang specified in the cookie. If, however, such cookie would not exist, then your redirection should work as usual.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.