PHP перенаправить только один раз с GeoIp2

Я использую MaxMind GeoIp2 PHP для перенаправления посетителей сайта в зависимости от их страны.

Мне удалось заставить редирект работать так, чтобы:
Американские посетители идут в http://www.example.com/us
Малайзийские посетители идут в http://www.example.com/my
Все остальные посетители идут в http://www.example.com

Проблема в том, что я хочу перенаправить посетителей только один раз.
После того, как они находятся на сайте, если они перейдут к http://www.example.com
они должны иметь возможность делать это без перенаправления, независимо от их страны.

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

Я попытался использовать предложение для аналогичной проблемы, как ответил Вот
но вопрос там касается разных доменов для разных стран, а не разных путей, поэтому решение не работает для меня.

Код:

<?php
require_once '../vendor/autoload.php';
use GeoIp2\Database\Reader;

$reader = new Reader('/usr/local/share/GeoIP/GeoLite2-Country.mmdb');

$record = $reader->country( $_SERVER['REMOTE_ADDR'] );

try {
$country = $record->country->isoCode;

switch((string)$country) {
case 'US':
$url = "http://www.example.com/us";
break;
case 'MY':
$url = "http://www.example.com/my";
break;
default:
$url = "http://www.example.com";
}

if (strpos("http://$_SERVER[HTTP_HOST]", $url) === false)
{
header("Location: ".$url);
}

} catch (Exception $e) {
// Handle exception
}
?>

Любая помощь с благодарностью.

2

Решение

Вы можете использовать куки для отслеживания:

  1. если посетитель был перенаправлен раньше
  2. страна, в которую посетитель был перенаправлен ранее

Если пауки умные, они тоже будут использовать куки (Ref: Могут ли боты / пауки использовать куки?).

Таким образом, вы можете написать свою логику так:

<?php
require_once '../vendor/autoload.php';
use GeoIp2\Database\Reader;

$cookie_name = "country_code";
session_start();


if (isset($_GET['check']) && $_GET['check'] == true) {

if (isset($_COOKIE['test_cookie']) && $_COOKIE['test_cookie'] == 'test') {

if(!isset($_COOKIE[$cookie_name])) {

$reader = new Reader('/usr/local/share/GeoIP/GeoLite2-Country.mmdb');

$record = $reader->country( $_SERVER['REMOTE_ADDR'] );

try {

$country = $record->country->isoCode;

switch((string)$country) {
case 'US':
$url = "http://www.example.com/us";
break;
case 'MY':
$url = "http://www.example.com/my";
break;
default:
$url = "http://www.example.com";
}

$cookie_value = "" . (string)$country;

setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day
if(!isset($_GET['cookies'])){

header('Location:/info.php?cookies=true');
}
if (strpos("http://$_SERVER[HTTP_HOST]", $url) === false)
{
header("Location: ".$url);
}

} catch (Exception $e) {
// Handle exception
}

} else { //cookie is set no redirect

}

} else { //no cookie support, no redirect

}

} else {

setcookie('test_cookie', 'test', time() + 3600);

header("location: {$_SERVER['PHP_SELF']}?check=true");
}


?>
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]