Maxminds GeoIP php根据国家代码重定向

时间:2012-04-10 12:08:21

标签: php redirect geoip

我已经在这方面工作了一个星期,并且已经尝试了我的.htaccess文件,但即使这样也基本上没有用于firefox它的说法......

  

页面没有正确重定向Firefox已经检测到了   服务器正在以一种方式重定向该地址的请求   永远不会完成           有时可能会因禁用或拒绝加密cookie而导致此问题。

并且在铬中说它.....

  

此网页有一个重定向循环网页位于   https://www.website.com/row/index.php导致了太多   重定向。清除本网站的cookie或允许第三方   cookies可以解决问题。如果没有,它可能是一个服务器   配置问题,而不是您的计算机的问题。

我将GeoIP PHP API中的GeoIP.dat和geoip.inc文件从Maxminds网站上传到我托管的目录,然后用以下php代码块编辑了我的index.php文件....

<?php
require_once("geoIP/geoip.inc");
$gi = geoip_open('geoIP/GeoIP.dat', GEOIP_MEMORY_CACHE);
$country = geoip_country_code_by_addr($gi, $_SERVER['REMOTE_ADDR']);
// prints the country code  your visitor is in
$my_countriesrow = array('AD','AE','AF','AG','AI'.....ect);
$my_countrieseuro = array('AN','AT','BA','BE','BG','BY','CH'.....ect);
/* $my_country = array('GB','UK'); */
if (!in_array(strtolower($country), $my_countriesrow)) {
header('Location: https://www.website.com/row/index.php');
exit();
}
else if(!in_array(strtolower($country), $my_countrieseuro)){
header('Location: https://www.website.com/euro/index.php');
exit();
}
else {
header('Location: https://www.website.com/index.php');
exit();
}
// the end
geoip_close($gi);
?>

我认为它可能与我的.htaccess文件有关,因为它包含了它....

# Make all requests have www in them
 RewriteEngine On
 RewriteCond %{HTTP_HOST} ^website\.com
 RewriteRule ^(.*)$ https://www.website.com$1 [R=permanent,L]

不知道还有什么可以把我所有的头发拉出来!非常感谢advans们!

此致 -Phillip

1 个答案:

答案 0 :(得分:0)

已更新

假设此代码包含在“https://www.website.com/row/index.php”中

如果我从BE访问此页面,将触发第一个if语句,并一遍又一遍地将我带到同一页面。

更新

这样的事情可能会阻止循环:

require_once("geoIP/geoip.inc");
$gi = geoip_open('geoIP/GeoIP.dat', GEOIP_MEMORY_CACHE);
$country = geoip_country_code_by_addr($gi, $_SERVER['REMOTE_ADDR']);
$my_countriesrow = array('AD','AE','AF','AG','AI');
$my_countrieseuro = array('AN','AT','BA','BE','BG','BY','CH');

/* if you got redirected, do not redirect again */
if (!isset($_GET['redirected'])) {
    if (!in_array(strtolower($country), $my_countriesrow)) header('Location: https://www.website.com/row/index.php?redirected');
    else if(!in_array(strtolower($country), $my_countrieseuro)) header('Location: https://www.website.com/euro/index.php?redirected');
    else header('Location: https://www.website.com/index.php?redirected');
}

geoip_close($gi);