перенаправление на поддомен

Статус
В этой теме нельзя размещать новые ответы.

palbanec

Профессор
Регистрация
2 Июл 2010
Сообщения
457
Реакции
47
Возникла задача. Есть сайт интернет магазин.Нужно создать по регионам свои магазины.С этим проблем нет.А вот как сделать, чтоб при посещении главного домена, ip определённого региона переносило пользователя сразу на поддомен(магазин его региона ip).
 
функция для определению региона по ip:

function occurrence($ip='', $to = 'utf-8')
{
$ip = ($ip) ? $ip : $_SERVER['REMOTE_ADDR'] ;
$xml = simplexml_load_file('Для просмотра ссылки Войди или Зарегистрируйся
if($xml->ip->message){
if( $to == 'utf-8' ) {return $xml->ip->message;} else {
if( function_exists( 'iconv' ) ) return iconv( "UTF-8", $to . "//IGNORE",$xml->ip->message);else return "The library iconv is not supported by your server";}
} else { if( $to == 'utf-8' ) {return $xml->ip->region;} else {if( function_exists( 'iconv' ) ) return iconv( "UTF-8", $to . "//IGNORE",$xml->ip->region);else return "The library iconv is not supported by your server";}}
}
дальше switch и редирект
 
Этот код надо вставить в самое начало файла index.php в корне сайта:

<?php
/**
* Created by Alex Vertinsky
* Date: 29.10.12
* Time: 1:35
* Функция возвращает данные по ip адресу
* В качестве параметров type можно указать следующие параметры
* country - чтобы получить название страны
* city - чтобы получить название города
* region - чтобы получить название региона
* district - чтобы получить название округа
*/

function occurrence($ip = '', $to = 'utf-8', $type = 'region')
{
$ip = ($ip) ? $ip : $_SERVER['REMOTE_ADDR'];
$xml = simplexml_load_file('Для просмотра ссылки Войди или Зарегистрируйся' . $ip);
// print_r($xml);
if ($xml->ip->message) {
if ($to == 'utf-8') {
return $xml->ip->message;
} else {
if (function_exists('iconv')) return iconv("UTF-8", $to . "//IGNORE", $xml->ip->message); else return "The library iconv is not supported by your server";
}
} else {
if ($to == 'utf-8') {
return $xml->ip->$type;
} else {
if (function_exists('iconv')) return iconv("UTF-8", $to . "//IGNORE", $xml->ip->region); else return "The library iconv is not supported by your server";
}
}
}

$incomingIP = $_SERVER['REMOTE_ADDR'];

$result = occurrence($incomingIP, 'utf-8','region');

switch ($result){
case 'Санкт-Петербург':
header('Location: Для просмотра ссылки Войди или Зарегистрируйся
break;
case 'Детройт':
header('Location: Для просмотра ссылки Войди или Зарегистрируйся
break;
default:
echo 'def';
break;
}


Спасибо предыдущему автору: я использовал его функцию и чуть чуть поменял для своего удобства
соответственно тут : 'Санкт-Петербург' перенаправит на домен Для просмотра ссылки Войди или Зарегистрируйся
и 'Детройт' перенаправит на домен Для просмотра ссылки Войди или Зарегистрируйся
добавляй свои значения и регионы в таком виде:

case 'Детройт':
header('Location: Для просмотра ссылки Войди или Зарегистрируйся
break;
 
  • Заблокирован
  • #4
Если у тебя VPS, то лучше установить базу MaxMind - GeoIP, если используешь апач, то там все просто, плюсом ставишь на крон обновление, если надо высокий процент попадания в реальный регион, покупай свежую базу, или ищи её.
Вот тут можно посмотреть как прикрутить Для просмотра ссылки Войди или Зарегистрируйся
 
про exit забыли. надо примерно так.
PHP:
case 'Детройт':
header('Location: http://usa.sms-pr.ru');
exit;
break;
Спасибо, это было бы правильнее.
Все оставшиеся команды выполнятся и скрипт еще чутка погрузит сервер.
я кое что еще забыл.

Надо дописать проверку на то что юзер находится на своем регионе и не посылать его ни куда больше, иначе может зациклить в редиректе.
<-------------- добавлено через 54 сек. -------------->
Если у тебя VPS, то лучше установить базу MaxMind - GeoIP, если используешь апач, то там все просто, плюсом ставишь на крон обновление, если надо высокий процент попадания в реальный регион, покупай свежую базу, или ищи её.
Вот тут можно посмотреть как прикрутить Для просмотра ссылки Войди или Зарегистрируйся

А какого то единого централизованого GeoIP не существует?
 
Надо дописать проверку на то что юзер находится на своем регионе и не посылать его ни куда больше, иначе может зациклить в редиректе.
Было бы не плохо увидеть сей код.)
 
В зависимости от движка на котором создам магазин, в Drupal когда то встречал пободную реализацию
 
реализация нужна на openCart
 
ipgeobase.ru обновляет базу раз в сутки (если у них договор с руцентром, то последним не вариант загружать свои серваки лишними запросами - проще один раз базу слить). Можно, как вариант, тянуть информацию чз какой-нибудь сервис, который обращается к базам регистраторов и даёт инфу, пусть не в режиме реального времени, но всё же более достоверно. Посему такой вариант тоже имеет право на существование.
if( $curl = curl_init() ) {
$ip = $_SERVER["REMOTE_ADDR"];
curl_setopt($curl, CURLOPT_URL, 'Для просмотра ссылки Войди или Зарегистрируйся
curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
$out = curl_exec($curl);
$matches = array();
preg_match_all("/Страна: (.*)/i", $out, $matches);
$country=$matches[1][1];

$matches1 = array();
preg_match_all("/Регион: (.*)/i", $out, $matches1);
$region=$matches1[1][1];

$matches2 = array();
preg_match_all("/Город: (.*)/i", $out, $matches2);
$town=$matches2[1][1];
curl_close($curl);
//$town=substr($town,0,strlen($town)-3);
}
echo "Страна: $country";
echo "Регион: $region";
echo "Город: $town";
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху