@unlik

Редирект в зависимости от страны?

Как можно сделать редирект в зависимости от страны?
Если россия, то не редиректим, просто главная страница
Если другая страница то редирект на /en
  • Вопрос задан
  • 3454 просмотра
Пригласить эксперта
Ответы на вопрос 4
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
если именно страна - geoIP
если достаточно язык браузера - $_SERVER['HTTP_ACCEPT_LANGUAGE']
Ответ написан
@MaksPaverov
Вариант намного больше, чем у человека выше, но он рабочий...

//Получаем IP пользователя
$ip =  $_SERVER['REMOTE_ADDR'];

//Функция whois для определения страны по IP\
function whois($ip) {
  if ($ip!="") {
    $sock = fsockopen ("whois.ripe.net",43,$errno,$errstr);
    if ($sock) {
       fputs ($sock, $ip."\r\n");
      while (!feof($sock)) {
        $str.=trim(fgets ($sock,128)." <br>");
      }
    }
    else {
          $str.="$errno($errstr)";
      return;
    }
    fclose ($sock);
  }
  return $str;
  }

//Получаем whois данные для IP пользователя
$whois =  whois($_SERVER['REMOTE_ADDR']);

//Получаем страну, исходя из whois IP
$need = "country:";
 $pos = strpos($whois,$need);
 $search = substr($whois,$pos,18);
 $excount = explode(":", $search);
 $country = trim($excount[1]);

//Ну и сам код редиректа
if($country == "US") {
header('Location: /us/');
exit();
}
Ответ написан
Комментировать
@DanKud
preg_match('/^\w{2}/', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $m);
switch (strtolower($m[0])) {
    case 'ru': break;
    default: header('Location: /en'); break;
}
Ответ написан
Комментировать
@KirillADV
У меня на выходных возникла идейка
- можно попробовать без куков и лишних заморочек
- только вопрос как на это отреагируют поисковики при индексации при новой структуре и что будут со старыми ссылками как их поисковик обработает?

Вот структура сайта (соответственно на каждой странице сайта будет возможность выбора языка принудительно, и ссылки будут переходить, согласно структуре сайта - ниже)
-----------------------

мойдомен.ru
|
index.php (содержит только на редирект (блок кода - 1 смотри внизу))
|
|\
мойдомен.ru/eng/index.php (и получаеться все обращания к страницам бцдцт в рамках префикса /eng/)
|
|
|\
мойдомен.ru/rus/index.php (и получаеться все обращания к страницам бцдцт в рамках префикса /rus/)

(блок кода - 1)
---------------------------------
preg_match('/^\w{2}/', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $m);
switch (strtolower($m[0])) {
case 'ru': header('Location: /rus/index.php'); break;
default: header('Location: /eng/index.php'); break;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы