我如何跟踪访问者的国家并将他们重定向到适当的站点?

Posted

技术标签:

【中文标题】我如何跟踪访问者的国家并将他们重定向到适当的站点?【英文标题】:How do i track the visitor's country and redirect them to appropriate sites? 【发布时间】:2010-05-14 07:01:25 【问题描述】:

我想跟踪访问者所在的国家/地区,然后将他们重定向到我网站的相应子域,就像 google 所做的那样......

如果我应该使用任何 api 的数据,我可以在多大程度上依赖?..

我正在使用 php..

【问题讨论】:

许多公司的互联网访问是通过一个国家/地区进行的,即使他们的员工在其他地方 【参考方案1】:

下载并安装Maxmind's GeoLite Country 数据库,该数据库声称准确率为 99.5%。您可以付费升级到声称准确率为 99.8% 的付费版本。关于如何从 PHP 中使用数据库,有四个选项:

    下载 CSV 文件并将其导入您选择的 SQL 数据库。这是最慢的选项,并且有一个丑陋的 API。我不会推荐它,但为了完整起见,它包括在内。 下载一个可以读取数据库文件的纯PHP类。这提供了一个比 SQL 选项更好的 API,但仍然有点慢。有PHP4 和PHP5 的版本 下载并安装C extension module for PHP。这样做的好处是拥有nice interface 和良好的性能。但是,它比纯 PHP 类更难安装,因此您可能需要咨询您的托管公司。如果幸运的话,它可能已经安装好了。 如果您需要极快的性能,请使用Apache module。它是最难安装,但也是最快的选项。

所有这些选项都有获取国家代码的方法。我不会包含 SQL 选项,但您可以获取 more info here。

纯 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 扩展:

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

Apache 模块:

$code = apache_note("GEOIP_COUNTRY_CODE");

然后您可以使用 HTTP 重定向基于这些代码进行重定向:

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

然而,这会导致两个 HTTP 请求,因此不是最理想的。更好的方法是在 .htaccess 文件中使用 Apache 模块进行重写:

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]

当然,可以说更好的方法是让其他人在 DNS 级别为您做这件事。快速搜索显示this company,(我不知道它们是否好)毫无疑问还有其他人。 Google 就是这样做的。

【讨论】:

非常干净的答案。无需参考其他任何地方..感谢极客【参考方案2】:

根据您想要划分客户端“世界”的粒度和可能的目标(子域)的数量,您可以使用IP-to-country database 或MaxMind.com's Free Geolocation Database 中提供的数据,将其放入 SQL 表中并然后使用小脚本查找访问者的 IP 地址并根据需要进行重定向。

数据永远不会 100% 准确,尤其是当您的任何访问者通过代理或其他匿名者访问您的网站时(在这种情况下,您看到的 IP 地址不是他们的真实地址)。如果您确实实现了这一点,我建议允许用户更正(或简单地覆盖)区域重定向是值得的。

【讨论】:

【参考方案3】:

如果您不想自己编写代码,Evan 有一个很酷的脚本,叫做 Lambda GeoIP!在这里查看:http://www.lambdageoip.com

Lambda GeoIP 是一个完全自托管的地理定位脚本,您可以在您的网站上使用它来确定访问者的地理位置。除此之外,您还可以确定用户是使用移动设备、机器人还是使用卫星连接。

您还可以根据用户所在的大陆、国家、地区或城市将用户转发到不同的页面。

只需 1 行 PHP 代码,即可在您的网站上使用所有功能。

Lambda GeoIP 不会“打电话回家”、加载远程内容或与任何其他服务器通信。它是安全且完全自托管的。

【讨论】:

【参考方案4】:

如果您不介意在您的服务器上下载、安装和保持最新的 ip 数据库,那么 Fmark 的解决方案在性能方面是最好的。 否则,您可以使用重定向服务,例如 www.redirectbycountry.com

【讨论】:

【参考方案5】:

一个版本是您可以使用您的服务提供商的 IP 地址,然后使用 javascript 将其重定向如下;

$.get("https://ipinfo.io", function(response) 
   if(response.country=="GB")
      window.location.replace("http://***.com");
   
, "jsonp");

【讨论】:

以上是关于我如何跟踪访问者的国家并将他们重定向到适当的站点?的主要内容,如果未能解决你的问题,请参考以下文章

当我的用户访问我的博客时,如何将他们重定向到特定标签?

如何根据国家IP地址重定向域

根据 Cloudflare GEO TARGET 将访问者重定向到他们的语言

使用 htaccess 将请求 uri 重定向到镜像站点

任何国家/地区城市基域重定向

Android:3d 安全重定向响应