如何根据用户的国家/地区显示不同的主页?

时间:2010-01-23 04:49:16

标签: php networking

我有两个域名。 rajasekar.com和rajasekar.in。我需要做的是,

当来自印度的用户在地址栏中输入网址为www.rajasekar.com然后它应该打开www.rajasekar.in

当其他国家的用户在地址栏中输入网址为www.rajasekar.com时,应该打开www.rajasekar.com

我认为这是在GOOGLE中实现的。请帮助我实现这个目标

5 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

在ASP.NET中,使用以下方法获取客户端的IP地址:

Request.ServerVariables("REMOTE_ADDR")

使用某些IP地理位置服务,例如:

  1. Maxmind
  2. IPAddressExtentions
  3. 到达国家后,您可以轻松地重定向用户:

     Response.Redirect("http://www.yourdomain.in")
    

答案 2 :(得分:1)

您可以尝试根据用户的远程地址猜测国家/地区。

以下是一个有效的解决方案,您必须使用重定向逻辑:

$remoteAddr = $_SERVER['REMOTE_ADDR'];
$lookupUrl = sprintf('http://api.hostip.info/country.php?ip=%s', $remoteAddr);
$country = trim(file_get_contents($lookupUrl));

if ('IN' === $country)
{
    $newUrl = 'http://www.rajasekar.in/';

    header(sprintf('Location: %s', $newUrl));
    printf('<a href="%s">Moved.</a>', $newUrl);
    exit();
}

请注意,来自印度的搜索引擎机器人也能够抓取.com内容。

答案 3 :(得分:1)

Accept-Language请求标头将告诉您用户将其浏览器设置为的语言/区域。

答案 4 :(得分:0)

而不是(或至少除此之外)查看IP地址的国家/地区,您应该检查Accept-Language HTTP标头(PHP中的$_SERVER['HTTP_ACCEPT_LANGUAGE']

此标头通常包含语言 - 国家/地区对:

en-US, hi_IN, fr, de;q=0.5

PHP intl extension has methods that help parsing it

IP查找问题:

  • 普通用户无法更改其IP地址或其地址在IP地理数据库中的分类方式。用户更有可能选择/配置其操作系统/浏览器的语言,这会影响Accept-Language标题。

  • 国家/地区的ISP代理与用户不同,例如AOL通过美国路由一些国际流量,许多移动用户使用在挪威拥有代理服务器的Opera Mini。如果您正在查找IP,请至少考虑X-Forwarded-For标头。 Accept-Language标头通过代理传递,没有出现此类问题。

  • 我一直在使用hostip.info数据库,发现它不完整并且包含错​​误。还要考虑每次向第三方PHP脚本发出HTTP请求会减慢您的网站速度并浪费资源。解析Accept-Language标题基本上是免费的。

  • 如果您不仅仅想要国家/地区,但语言用户会说话,那么对于使用不同语言的国家/地区,IP→国家/地区将不准确。 Accept-Language可能会为您提供更准确的信息(例如,比利时为荷兰语nl_BE,加拿大法语为fr_CA

这两种方法都不是100%正确,因此让用户覆盖您的选择是明智的。

另请注意,如果您强制重定向到“正确”域,则搜索引擎机器人将无法为您的所有域编制索引,因为它们很可能来自美国的IP地址,并且不会指定首选语言。最好将检测应用于.com以外的域,和/或不将其应用于主页以外的页面。