如何跟踪访问者的国家/地区并将其重定向到适当的网站?

时间:2010-05-14 07:01:25

标签: php geolocation

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

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

我正在使用php ..

5 个答案:

答案 0 :(得分:17)

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

  1. 下载CSV文件并将其导入您选择的SQL数据库。这是最慢的选项,并且有一个丑陋的API。我不推荐它,但为了完整起见,它包括在内。
  2. 下载可以读取数据库文件的纯PHP类。这提供了一个比SQL选项更好的API,但仍然有点慢。有PHP4PHP5
  3. 的版本
  4. 下载并安装C extension module for PHP。这具有nice interface和良好性能的优点。然而,它比纯PHP类更难安装,因此您可能需要与您的托管公司核实。如果幸运的话,它可能已经安装好了。
  5. 如果您需要极快的性能,请使用Apache module。这是最难安装的,但也是最快的选择。
  6. 所有这些选项都有获取国家/地区代码的方法。我不会包含SQL选项,但您可以获得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扩展:

    $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请求,因此不是最理想的。更好的方法是使用Apache模块在.htaccess文件中重写:

    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,(我不知道他们是否好),毫无疑问还有其他人。谷歌就是这样做的。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

如果你不想自己编码,Evan有一个名为Lambda GeoIP的酷脚本!请在此处查看:http://www.lambdageoip.com

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

您还可以根据用户的洲,国家,地区或城市将用户转发到不同的网页。

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

一个版本是您可以使用服务提供商的IP地址,因此使用Javascript重定向,如下所示;

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