“此网页有一个重定向循环”(使用GeoIP重定向网站)

时间:2014-01-08 13:29:57

标签: php redirect geoip

我正在尝试向我的网站添加一些代码,以便根据用户的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?>'之前没有空格标签

1 个答案:

答案 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。 也许你确实有这方面的翻译,但用户不会被重定向。