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

Vij*_*jay 9 php geolocation

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

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

我正在使用PHP ..

fma*_*ark 17

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

  1. 下载CSV文件并将其导入您选择的SQL数据库.这是最慢的选项,并且有一个丑陋的API.我不推荐它,但它包括为了完整性.
  2. 下载一个可以读取数据库文件的纯PHP类.这提供了一个比SQL选项更好的API,但仍然有点慢.有PHP4PHP5的版本
  3. 下载并安装PHPC扩展模块.这具有良好的界面和良好的性能的优点.然而,它比纯PHP类更难安装,因此您可能需要与您的托管公司核实.如果幸运的话,它可能已经安装好了.
  4. 如果您需要极快的性能,请使用Apache模块.它是最难安装的,也是最快的选择.

所有这些选项都有一种获取国家/地区代码的方法.我不会包含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");
Run Code Online (Sandbox Code Playgroud)

PECL PHP扩展:

$code = geoip_country_code_by_name($_SERVER['REMOTE_ADDR']);
Run Code Online (Sandbox Code Playgroud)

Apache模块:

$code = apache_note("GEOIP_COUNTRY_CODE");
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用HTTP重定向根据这些代码重定向:

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

然而,这会导致两个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]
Run Code Online (Sandbox Code Playgroud)

当然,一个可以说是更好的方法是让其他人在DNS级别为你做这件事.快速搜索显示这家公司,(我不知道他们是否好),毫无疑问还有其他公司.谷歌就是这样做的.