我正在尝试向我的网站添加一些代码,以便根据用户的IP地址重定向用户。无论我做什么,我都会收到“此网页有重定向循环”的消息。
这是我的代码:
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文件的顶部,'\< \?php?>'之前没有空格标签
答案 0 :(得分:1)
我假设$_GET['FirstTimer']
未设置。所以你的开关总是被执行。
当geoip返回GR
时,您的脚本将再次重定向到http://mywebsite.com/
。
$_SERVER['REQUEST_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
。
也许你确实有这方面的翻译,但用户不会被重定向。