2

这个问题有一段时间了!无论如何,我已经下载了 Maxminds GEOIP php 模块并将其上传到我的服务器,然后我将这部分代码放入我的 index.php 页面

<?php
require_once("geoip/geoip.inc");
$gi = geoip_open("geoip/GeoIP.dat",GEOIP_STANDARD);
$country = geoip_country_code_by_addr($gi, $_SERVER['REMOTE_ADDR']);
geoip_close($gi);

$my_countriesrow = array('AD','AE','AF'......and so on);
$my_countrieseuro = array('AN','AT','BA','BE','BG','BY'.......and so on);
/* $my_country = array('GB','UK'); */

if (!in_array(strtolower($country), $my_countriesrow)){
    header('Location: https://www.website.com/row/index.php');
    exit();
}
elseif (!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();
}
?>

我已将该页面上传到我的服务器,并且在 Google Chrome 中我得到了......这个网页有一个重定向循环

The web page at https://www.website.com/index.php has resulted in too many redirects. Clearing your cookies for this site or allowing third-party cookies may fix the problem. If not, it is possibly a server configuration issue and not a problem with your computer.

和火狐一样!任何人都有任何想法,因为我全力以赴....

提前致谢!

-菲利普·杜斯

更新

OK 已经决定走 .HTACCESS 路线了!我已将我的 htaccess 文件编辑为如下所示....

GeoIPEnable On
GeoIPDBFile /geoip/GeoIP.dat

# Europe
RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^AM$
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^AO$
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^AQ$
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^AR$
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^AS$
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^AU$
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^AW$
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^AX$
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^AZ$
RewriteRule ^(.*)$ https://www.Website.com/europe$1 [L]

# Rest Of World
RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^AD$
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^AE$
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^AF$
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^AG$
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^AI$
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^AL$
RewriteRule ^(.*)$ https://www.Website.com/row$1 [L]

但是由于某种原因,我收到了 500 个内部错误,即使在每个国家/地区都输入了它仍然对我不起作用!真的不知道现在该怎么做,因为我已经使用不同的 php 脚本和现在这个工作了一个多星期。希望任何人都可以帮助提前再次感谢,我问的原因是有很多国家代码要手动输入,所以不想把它们都放进去却发现它不起作用!再次感谢!

-菲利普

4

3 回答 3

0

好吧,我不确定我会这样做。

你为什么不“玩”一下htaccess文件?

在这里检查我的答案:

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

我想这对你来说可能也是正确的......

于 2012-04-07T13:06:29.530 回答
0

好吧,如果您的两个 if 语句都不匹配,那么您将重定向到/index.php. 由于您正在编辑的代码服务index.php,请求/index.php被重定向......再次,到index.php。你可能想要:

$my_countrieseuro = array('AN','AT','BA','BE','BG','BY'.......and so on);

if (in_array(strtolower($country), $my_countrieseuro)){
    // European version
    header('Location: https://www.website.com/euro/index.php');
    exit();
} else {
    // International version
    header('Location: https://www.website.com/row/index.php');
    exit();
}
于 2012-04-07T13:04:17.380 回答
0

.htaccess 文件中的大量 RewriteCond 语句不起作用的原因是它们在逻辑上被“与”在一起。

RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^AM$ [OR]
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^AO$ [OR]
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^AQ$
RewriteRule ...some special stuff for any of these hosts... 

您需要在每个条件末尾的方括号中使用“本地 OR”,以防止隐式 AND。

于 2016-02-19T04:11:32.010 回答