views:

181

answers:

4

HI

I want to track the country of the visitors and then redirect them to appropriate subdomains of my site like what google does...

And upto what extent i can rely on the data of the api if i should use any?..

I'm using php..

+1  A: 

Dependent on the granularity to which you want to divide your client "world" and the number of possible targets (subdomains) you could use the data provided in the IP-to-country database or MaxMind.com's Free Geolocation Database, place it into an SQL table and then use a small script to perform a lookup on the visitor's IP address and redirect as required.

The data will never be 100% accurate, especially if any of your visitors access your site via proxies or other anonymisers (in which case the IP address you see is not their true address). If you do implement this, I would suggest that allowing the user to correct (or simply override) the regional redirection would be worth including.

Lucanos
+6  A: 

Download and install Maxmind's GeoLite Country database, which claims 99.5% accuracy. You can pay to upgrade to a paid version with a claimed 99.8% accuracy. There are four options with respect to how to use the database from PHP:

  1. Download the CSV file and import it into your SQL database of choice. This is the slowest option, and has an ugly API. I wouldn't recommend it, but its included for sake of completeness.
  2. Download a pure PHP class which can read the database file. This provides a nice API than the SQL option, but is still a little slow. There are versions for PHP4 and PHP5
  3. Download and install the C extension module for PHP. This has the advantage of having a nice interface and good performance. It is more difficult to install than the pure PHP class however, so you might need to check with your hosting company. If you're lucky, it may already be installed.
  4. If you need blazingly fast performance, go with the Apache module. It is the most difficult to install, but also the fastest option.

All these options has a method for getting a country code. I won't include SQL option, but you can get more info here.

Pure PHP4:

include("geoip.inc");
$gi = geoip_open("/usr/local/share/GeoIP/GeoIP.dat",GEOIP_STANDARD);
$code = geoip_country_code_by_addr($gi, "24.24.24.24");

PECL PHP extension:

$code = geoip_country_code_by_name($_SERVER['REMOTE_ADDR']);

Apache module:

$code = apache_note("GEOIP_COUNTRY_CODE");

You can then redirect based on these codes, using an HTTP redirect:

 $redirect = array("AU" => "http://australia.example.com", "NZ" => "http://newzealand.example.com")
 $url = $redirect[$code]
 header("Location: $url");

This causes two HTTP requests however, and is thus suboptimal. A better approach is to use the Apache module to do rewriting, in your .htaccess file:

GeoIPEnable On
GeoIPDBFile /path/to/GeoIP.dat

# Redirect one country
RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^CA
RewriteRule ^(.*)$ http://www.canada.com$1 [L]

# Redirect multiple countries to a single page
RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^(CA|US|MX)$
RewriteRule ^(.*)$ http://www.northamerica.com$1 [L]

Of course, an arguably better way to do this is to get someone else to do it for you, at the DNS level. A quick search revealed this company, (I have no idea if they are good or not) no doubt there are others. This is how Google does it.

fmark
Very clean answer. No need to refer anywhere else.. thanks geek
kvijayhari
+1  A: 

You may also try IP2Location.com, it's one of the best geolocation service provider which offers the geographical location information detection to be more accurate. Many companies have using the service from its because of the multiple format of the databases and source codes.

JaceyKala
A: 

We can redirect the Website visitors by using IP address detection. I believe Google.com is also using some geolocation technology, but not practical if they can giving visitor selection for the language.

SuperRomia