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 d
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.
If you don't mind downloading, installing and keeping up-to-date an ip database on your server then the solution of Fmark is the best in terms of performances. Otherwise you can use a redirection service like www.redirectbycountry.com
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:
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.
If you don't feel like coding it yourself, Evan has a cool script called Lambda GeoIP! Check it out here: http://www.lambdageoip.com
Lambda GeoIP is a fully self-hosted geo-targeting script that you can use on your website to determine the geographic location of your visitors. In addition to that, you can determine if a user is on a mobile device, a bot, or using a satellite connection.
You can also forward users to different pages based on their continent, country, region, or city.
All of the features can be used on your site with just 1 line of code in PHP.
Lambda GeoIP does not "phone home", load remote content, or communicate with any other server. It is secure and fully self hosted.
One version is that you can use your service providers' ip address and hence redirect it with Javascript as follows;
$.get("https://ipinfo.io", function(response) {
if(response.country=="GB"){
window.location.replace("http://stackoverflow.com");
}
}, "jsonp");