я могу легко использовать этот скрипт, когда пользователи приземляются на site.com/redirect.php, они перенаправляются в соответствующий TLD в соответствии с гео-IP, но когда я добавляю этот код в 'index.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 } ?>
Вы должны проверить, посещает ли пользователь сайт через локализованный 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 } ?>
use this header("Location:".$url);
вы можете сделать что-то вроде: (ПРЕДУПРЕЖДЕНИЕ, я не тестировал этот код, но логика должна быть такой)
//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); } }