地理重定向上的无限循环

时间:2015-10-26 23:09:23

标签: infinite-loop url-redirection geoip

我有3个不同地区的网站,这些网站都有自己的位置特定内容:

我想根据用户的IP地址将访问者重定向到相应的网站。例如,如果用户从德国登陆http://dev.logichub.net/demo/fr/,则必须将他/她重定向到德国网站,即http://dev.logichub.net/demo/de/。我想在所有3个网站上实现同样的行为。

我在以下3个网站的主页上添加了以下代码:

var app = angular.module('myApp', [])

app.controller('MainCtrl', ['$scope', function($scope){
   $scope.num1 = 1;
   $scope.num2 = 1;
   $scope.total = parseInt($scope.num1 + $scope.num2);

}]);

除了重定向网站上的无限循环外,它的工作方式与我想要的完全一样。访问者被完美地重定向,但新网站永远加载。如何在访问者重定向到正确的网站时停止无限循环,不再发生重定向?

1 个答案:

答案 0 :(得分:1)

在尝试重定向之前,您必须检查用户是否在正确的域中。这是一个完全用PHP制作的解决方案:

<?php
session_start();

$currentUrl = explode('/', "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]");
$currentCountry = isset($currentUrl[4]) ? $currentUrl[4] : '';

if(empty($_SESSION['country'])) {
    $geo_data = unserialize( file_get_contents('http://www.geoplugin.net/php.gp?ip=' . $_SERVER['REMOTE_ADDR']) );

    if(!empty($geo_data)) {
        $country = $geo_data['geoplugin_countryCode'];
        $_SESSION['country'] = $country = ($country != 'FR' || $country != 'DE') ? '' : $country;
    }
}

if($currentCountry != $_SESSION['country'])
    header('Location: http://dev.logichub.net/demo/'.$country);

您可以通过获取当前国家/地区来改进此代码,而无需在URL中搜索(例如,通过在文件中定义它),但实际上,它应该可以更好地工作。