2013-06-04 3 views
2

Я могу использовать этот скрипт легко, когда пользователи приземляются на site.com/redirect.php , они перенаправляются в соответствующий TLD в соответствии с гео IP-адресом , но когда я добавляю этот код в 'index.php 'он создает цикл перенаправления. Можете ли вы помочь мне изменить его, чтобы он не создавал цикл. сейчас это «прорыв» не помогает ..Geo перенаправить пользователя только один раз с помощью php

<?php 
// Next two lines are for Beyond Hosting 
// Don't forget to change your-domain 
require_once '/home/your-domain/php/Net/GeoIP.php'; 
$geoip = Net_GeoIP::getInstance('/home/your-domain/php/Net/GeoIP.dat'); 

// Next two lines are for HostGator 
require_once 'Net/GeoIP.php'; 
$geoip = Net_GeoIP::getInstance('GeoIP.dat'); 

try { 
    $country = $geoip->lookupCountryCode($_SERVER['REMOTE_ADDR']); 

    switch((string)$country) { 
    case 'AU': 
     $url = "http://www.site.au"; 
     break; 
    case 'CA': 
     $url = "http://www.site.ca"; 
     break; 
    default: 
     $url = "http://site.com"; 
    } 

    header('Location: '.$url); 
} catch (Exception $e) { 
    // Handle exception 
} 
?> 
+0

Это бесконечный цикл, потому что вы перенаправлять их постоянно указательным р возраста, страница проверяет, в какой стране они находятся, и затем перенаправляет их на индексную страницу снова. – Matheno

ответ

1

вы должны проверить, если пользователь посещает сайт через локализованный URL перед пересылкой:

<?php 
// Next two lines are for Beyond Hosting 
// Don't forget to change your-domain 
require_once '/home/your-domain/php/Net/GeoIP.php'; 
$geoip = Net_GeoIP::getInstance('/home/your-domain/php/Net/GeoIP.dat'); 

// Next two lines are for HostGator 
require_once 'Net/GeoIP.php'; 
$geoip = Net_GeoIP::getInstance('GeoIP.dat'); 

try { 
    $country = $geoip->lookupCountryCode($_SERVER['REMOTE_ADDR']); 

    switch((string)$country) { 
    case 'AU': 
     $url = "http://www.site.au"; 
     break; 
    case 'CA': 
     $url = "http://www.site.ca"; 
     break; 
    default: 
     $url = "http://site.com"; 
    } 

    if (strpos("http://$_SERVER[HTTP_HOST]", $url) === false) 
    { 
     header('Location: '.$url); 
    } 
} catch (Exception $e) { 
    // Handle exception 
} 
?> 
+0

Thanks Работало как шарм :) –

+0

Где вы взяли файл GeoIP.php? –

0

вы можете сделать что-то вроде: (ВНИМАНИЕ, я не проверял этот код, но логика должна быть, как это)

//Inside your try: 
$country = $geoip->lookupCountryCode($_SERVER['REMOTE_ADDR']); 
$serverName = explode('.', $_SERVER['SERVER_NAME']); 
$serverCountryCode = $serverName[count($serverName)-1]; 
if (strtoupper ($serverCountryCode) != $country)) { 
$shouldRedirect = true; 
switch((string)$country) { 
    case 'AU': 
     $url = "http://www.site.au"; 
     break; 
    case 'CA': 
     $url = "http://www.site.ca"; 
     break; 
    default: 
     if ($serverCountryCode == 'com') { 
     $shouldRedirect = false; 
     } 
     $url = "http://site.com"; 
    } 
    if ($shouldRedirect) { 
    header('Location: '.$url); 
    } 
} 
Смежные вопросы