Как отследить страну посетителя и перенаправить его на соответствующие сайты? - PullRequest
9 голосов
/ 14 мая 2010

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

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

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

Ответы [ 5 ]

17 голосов
/ 14 мая 2010

Загрузите и установите База данных 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.

1 голос
/ 14 мая 2010

В зависимости от степени детализации, на которую вы хотите разделить «мир» вашего клиента, и количества возможных целей (поддоменов), вы можете использовать данные, предоставленные в базе данных IP-to-country или Бесплатная база геолокационных данных MaxMind.com , поместите ее в таблицу SQL, а затем с помощью небольшого сценария выполните поиск по IP-адресу посетителя и перенаправьте при необходимости.

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

0 голосов
/ 25 апреля 2017

Одна версия заключается в том, что вы можете использовать IP-адрес вашего поставщика услуг и, следовательно, перенаправить его с помощью Javascript следующим образом:

$.get("https://ipinfo.io", function(response) {
   if(response.country=="GB"){
      window.location.replace("http://stackoverflow.com");
   }
}, "jsonp");
0 голосов
/ 13 марта 2014

Если вы не возражаете против загрузки, установки и обновления базы данных ip на вашем сервере, тогда решение Fmark является лучшим с точки зрения производительности. В противном случае вы можете использовать службу перенаправления, такую ​​как www.redirectbycountry.com

0 голосов
/ 10 декабря 2010

Если вы не хотите писать код самостоятельно, у Эвана есть классный скрипт под названием Lambda GeoIP! Проверьте это здесь: http://www.lambdageoip.com

Lambda GeoIP - это полностью самодостаточный скрипт геотаргетинга, который вы можете использовать на своем веб-сайте для определения географического местоположения посетителей. Кроме того, вы можете определить, подключен ли пользователь к мобильному устройству, боту или использует спутниковую связь.

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

Все функции могут быть использованы на вашем сайте только с одной строкой кода в PHP.

Lambda GeoIP не «звонит домой», не загружает удаленный контент и не связывается с любым другим сервером. Это безопасно и полностью самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...