“此网页有一个重定向循环”(使用 GeoIP 重定向网站)
Posted
技术标签:
【中文标题】“此网页有一个重定向循环”(使用 GeoIP 重定向网站)【英文标题】:"This webpage has a redirect loop" (redirect website with GeoIP) 【发布时间】:2014-01-08 13:29:56 【问题描述】:我正在尝试向我的网站添加一些代码,以便根据用户的 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文件的顶部,'\'标签前没有空格。
【问题讨论】:
在if(!isset($_COOKIE['FirstTimer'])):
之前直接尝试die($_COOKIE['FirstTimer']);
看看是否有意义
我试过了,加载了空白页。
很好,所以它是空的。为什么您帖子第 1 行的代码未正确设置 $_COOKIE['FirstTimer']
?
改用die('<pre>'.print_r($_COOKIE, true).'</pre>');
我更新了我的答案。看看它。这是另一种观点,因为我认为您在第一次访问时设置查询参数不会有太多运气。
【参考方案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
。
也许您确实对此有翻译,但不会重定向用户。
【讨论】:
你的意思是我应该完全移除'GR'案例? 不,我假设$_GET['FirstTimer']
没有在开始时设置,并且您的 cookie 没有创建。所以检查为什么。即使已设置,也无法到达您的开关。
我现在可以看到问题在于 cookie 而不是重定向。我根据这里的 cmets 自己更改了代码并且它有效。无论如何,您的代码版本比我的更好:)谢谢!以上是关于“此网页有一个重定向循环”(使用 GeoIP 重定向网站)的主要内容,如果未能解决你的问题,请参考以下文章
如何保护 Django 中的静态 HTML 文件? (重定向前需要登录)