Как я отслеживаю страну посетителя и перенаправляю их на соответствующие сайты?

Я хочу отследить страну посетителей и затем перенаправить их к соответствующим субдоменам моего сайта как то, что делает Google...

И до того, какая степень я могу полагаться на данные API, если я должен использовать кого-либо?..

Я использую php..

9
задан Cornel Creanga 8 January 2012 в 12:47
поделиться

2 ответа

Загрузите и установите База данных Maxmind GeoLite Country , точность которой составляет 99,5%. Вы можете заплатить за обновление до платной версии с заявленной точностью 99,8%. Существует четыре варианта использования базы данных из PHP:

  1. Загрузите файл CSV и импортируйте его в выбранную базу данных SQL. Это самый медленный вариант с уродливым API. Я бы не рекомендовал его, но он включен для полноты картины.
  2. Загрузите чистый класс PHP, который может читать файл базы данных. Это обеспечивает более приятный API, чем опция SQL, но все же немного медленный. Существуют версии для PHP4 и PHP5
  3. Загрузите и установите модуль расширения C для PHP . Это дает преимущество приятного интерфейса и хорошей производительности. Однако его сложнее установить, чем чистый класс PHP, поэтому вам, возможно, придется проконсультироваться с вашей хостинговой компанией. Если вам повезет, возможно, он уже установлен.
  4. Если вам нужна невероятно высокая производительность, воспользуйтесь модулем Apache . Это самый сложный в установке, но и самый быстрый вариант.

У всех этих опций есть метод получения кода страны. Я не буду включать опцию SQL, но вы можете получить дополнительную информацию здесь .

Чистый PHP4:

include("geoip.inc");
$gi = geoip_open("/usr/local/share/GeoIP/GeoIP.dat",GEOIP_STANDARD);
$code = geoip_country_code_by_addr($gi, "24.24.24.24");

Расширение PECL PHP:

$code = geoip_country_code_by_name($_SERVER['REMOTE_ADDR']);

Модуль Apache:

$code = apache_note("GEOIP_COUNTRY_CODE");

Затем вы можете перенаправить на основе этих кодов, используя перенаправление HTTP:

 $redirect = array("AU" => "http://australia.example.com", "NZ" => "http://newzealand.example.com")
 $url = $redirect[$code]
 header("Location: $url");

Однако это вызывает два HTTP-запроса и поэтому неоптимально . Лучше использовать модуль Apache для перезаписи в вашем файле .htaccess :

GeoIPEnable On
GeoIPDBFile /path/to/GeoIP.dat

# Redirect one country
RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^CA
RewriteRule ^(.*)$ http://www.canada.com$1 [L]

# Redirect multiple countries to a single page
RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^(CA|US|MX)$
RewriteRule ^(.*)$ http://www.northamerica.com$1 [L]

Конечно, возможно, лучший способ сделать это - попросить кого-нибудь сделать это за вас по адресу уровень DNS. Быстрый поиск показал эту компанию , (я не знаю, хороши они или нет), несомненно, есть и другие. Вот как это делает Google.

17
ответ дан 4 December 2019 в 11:40
поделиться

В зависимости от степени детализации, которую вы хотите разделите "мир" вашего клиента и количество возможных целей (поддоменов), которые вы можете использовать данные, предоставленные в базе данных IP-адрес страны или Free Geolocation Database MaxMind.com, поместите его в таблицу SQL, а затем используйте небольшой скрипт для поиска IP-адреса посетителя и перенаправления при необходимости.

Данные никогда не будут точными на 100%, особенно если кто-либо из ваших посетителей получает доступ к вашему сайту через прокси-серверы или другие анонимизаторы (в этом случае IP-адрес, который вы видите, не является их истинным адресом). Если вы все же реализуете это, я бы посоветовал разрешить пользователю исправить (или просто переопределить) региональное перенаправление.

1
ответ дан 4 December 2019 в 11:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: