Php &引用;此网页有一个重定向循环";(使用GeoIP重定向网站)
我正在尝试向我的网站添加一些代码,以便根据用户的IP地址重定向用户。无论我做什么,我都会收到一条“此网页有重定向循环”的消息 这是我的密码:Php &引用;此网页有一个重定向循环";(使用GeoIP重定向网站),php,redirect,geoip,Php,Redirect,Geoip,我正在尝试向我的网站添加一些代码,以便根据用户的IP地址重定向用户。无论我做什么,我都会收到一条“此网页有重定向循环”的消息 这是我的密码: if(isset($_GET['FirstTimer'])){ setcookie('FirstTimer','something',strtotime('+1 year'),'/'); $_COOKIE['FirstTimer']='something'; } require_once('geoip.inc'); $gi = geo
if(isset($_GET['FirstTimer'])){
setcookie('FirstTimer','something',strtotime('+1 year'),'/');
$_COOKIE['FirstTimer']='something';
}
require_once('geoip.inc');
$gi = geoip_open('GeoIP.dat', GEOIP_MEMORY_CACHE);
$country = geoip_country_code_by_addr($gi, $_SERVER['REMOTE_ADDR']);
if(!isset($_COOKIE['FirstTimer'])):
if($_SERVER['REQUEST_URI'] == '/'){
switch((string)$country) {
case 'GR':
header('Location: http://mywebsite.com/');
break;
case 'RU':
header('Location: http://mywebsite.com/ru');
break;
default:
header('Location: http://mywebsite.com/en');
}
}
endif;
geoip_close($gi);
“FirstTimer”cookie用于确定访问者是否是新访问者(因为我只想重定向新访问者)
代码放在index.php文件的顶部,在“\”标记之前没有空格。我假设未设置
$\u GET['FirstTimer']
。所以你的开关总是被执行的
当geoip返回GR
时,脚本将重定向到http://mywebsite.com/
请再说一遍。
$\u服务器['REQUEST\u URI']
返回/
,您又回到了交换机中
这是你的循环
编辑
我把你的剧本改了一点。如果用户第一次访问,则不必记录日志(这毫无意义),只需在用户上次访问时记录即可。
如果未设置此cookie,请启动geoip并重定向用户。如果已设置,请更新时间
if(!isset($_COOKIE['last_visit'])) {
setcookie('last_visit',date("Y-m-d H:i:s"),strtotime('+1 year'),'/');
require_once('geoip.inc');
$gi = geoip_open('GeoIP.dat', GEOIP_MEMORY_CACHE);
$country = geoip_country_code_by_addr($gi, $_SERVER['REMOTE_ADDR']);
if($_SERVER['REQUEST_URI'] == '/'){
switch((string)$country) {
case 'GR':
header('Location: http://mywebsite.com/');
break;
case 'RU':
header('Location: http://mywebsite.com/ru');
break;
default:
header('Location: http://mywebsite.com/en');
}
}
geoip_close($gi);
} else {
setcookie('last_visit',date("Y-m-d H:i:s"),strtotime('+1 year'),'/');
}
但是您肯定应该增强这个脚本,因为如果您有一个用户使用以下内容进入您的页面:http://yourwebsite.com/great/article/link.html
。
也许您对此有翻译,但用户不会被重定向。尝试
die($\u COOKIE['FirstTimer'])
直接在if(!isset($\u COOKIE['FirstTimer']):
之前,看看它是否让senseI尝试过,空白页被加载。很好,所以它是空的。为什么您的帖子第1行的代码没有正确设置$\u COOKIE['FirstTimer']
?请尝试die(“”.print\r($\u COOKIE,true)。“”)代码>Instedi更新了我的答案。看一看。这是另一种观点,因为我认为您在第一次访问时不会很幸运地设置查询参数。您的意思是我应该完全删除“GR”案例吗?不,我假设在开始时未设置$\u GET['FirstTimer']
,并且未创建cookie。所以,检查一下原因。即使设置了,也无法连接到您的交换机。我现在可以看出问题在于cookie,而不是重定向。根据这里的评论,我自己修改了代码,它成功了。你的代码版本比我的好:)谢谢!