Php 如何跟踪访客';并将其重定向到适当的站点?

Php 如何跟踪访客';并将其重定向到适当的站点?,php,geolocation,Php,Geolocation,我想追踪访问者的国家,然后将他们重定向到我网站的适当子域,就像谷歌所做的那样 如果我应该使用api的数据,我可以在多大程度上依赖它 我正在使用php..这取决于您想要划分客户机“世界”的粒度和可能的目标(子域)数量。您可以使用or中提供的数据,将其放入SQL表中,然后使用一个小脚本对访问者的IP地址执行查找,并根据需要重定向 数据永远不会100%准确,尤其是如果您的任何访问者通过代理或其他匿名者访问您的站点(在这种情况下,您看到的IP地址不是他们的真实地址)。如果您真的实现了这一点,我建议允许用

我想追踪访问者的国家,然后将他们重定向到我网站的适当子域,就像谷歌所做的那样

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


我正在使用php..

这取决于您想要划分客户机“世界”的粒度和可能的目标(子域)数量。您可以使用or中提供的数据,将其放入SQL表中,然后使用一个小脚本对访问者的IP地址执行查找,并根据需要重定向

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

下载并安装数据库,这要求99.5%的准确性。您可以付费升级到付费版本,据称准确率为99.8%。关于如何从PHP使用数据库,有四个选项:

  • 下载CSV文件并将其导入您选择的SQL数据库。这是最慢的选项,并且有一个丑陋的API。我不推荐它,但为了完整起见,它包括在内了
  • 下载一个可以读取数据库文件的纯PHP类。这提供了一个比SQL选项更好的API,但仍然有点慢。有用于和的版本
  • 下载并安装。这样做的优点是具有良好的稳定性和性能。但是,它比纯PHP类更难安装,因此您可能需要与托管公司联系。如果幸运的话,它可能已经安装好了
  • 如果您需要极快的性能,请使用。它是最难安装的,也是最快的选择
  • 所有这些选项都有获取国家代码的方法。我不会包括SQL选项,但您可以获得

    纯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级别为你做这件事。快速搜索发现,(我不知道它们是好是坏)毫无疑问还有其他的。谷歌就是这样做的。

    如果你不想自己编写代码,Evan有一个很酷的脚本,名为Lambda GeoIP!在这里查看:

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

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

    所有这些特性都可以在您的站点上使用,只需PHP中的一行代码


    Lambda GeoIP不会“呼叫总部”、加载远程内容或与任何其他服务器通信。它安全且完全自托管。

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

    一个版本是,您可以使用服务提供商的ip地址,从而使用Javascript重定向,如下所示:

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

    非常清楚的回答。无需参考其他任何地方。。谢天谢地,许多公司的互联网接入都是通过一个国家,即使他们的员工在其他地方