Гео перенаправление пользователя только один раз с помощью php


Я могу легко использовать этот скрипт, когда пользователи приземляются на 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
}
?>
Author: M Ali Salim, 2013-06-04

3 answers

Перед пересылкой вам следует проверить, посещает ли пользователь сайт по локализованному 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
}
?>
 1
Author: Stan, 2013-06-04 14:26:53
use this  
header("Location:".$url);
 0
Author: Muhammad Saqlain Arif, 2013-06-04 14:18:23

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

//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);
  }
}
 0
Author: Josejulio, 2013-06-04 14:23:41