[Мануал] .htaccess и GeoIP

Тема в разделе "Manuals / Мануалы", создана пользователем Артур, 12 ноя 2017.

  1. Артур

    Артур Активный участник

    Регистрация:
    6 ноя 2017
    Сообщения:
    31
    Симпатии:
    4
    Используя GeoIP можно выполнить перенаправление или блокировку определенных IP по странам.

    Для того чтобы настроить работу GeoIP на сайте используя .htaccess, необходимо проверить включен ли модуль GeoIP на сервере. Для этого необходимо создать php файл с любым названием, например: info.php, открыть его для редактирования и вставить такой код:

    <?php phpinfo(); ?>

    После этого перейти на эту страницу, например: https://unihost.com/info.php и нажать Ctrl+F для поиска на странице. В поисковую строку необходимо ввести “geo” без кавычек. В случае если на странице буду присутствовать директивы вида:

    _SERVER["HTTP_GEOIP_COUNTRY_NAME"]
    _SERVER["HTTP_GEOIP_COUNTRY_CODE"]
    _SERVER["HTTP_GEOIP_CONTINENT_CODE"]
    _SERVER["HTTP_GEOIP_ADDR"]
    Это значит что модуль GeoIP включен на сервере, на котором расположен сайт. В таком случае можно продолжать настройку GeoIP.
    Рассмотрим варианты применения GeoIP в примерах.

    Перенаправление по странам
    Иногда бывает нужно перенаправить пользователя с иностранным IP на английскую версию сайта, и наоборот. В таком случае в .htaccess необходимо вставить код вида:

    RewriteEngine On
    GeoIPEnable On
    RewriteCond %{REQUEST_URI} ^/$ [NC]
    RewriteCond %{ENV:GEOIP_COUNTRY_CODE} (RU|UA) [NC]
    RewriteRule .* http://unihost.com/ru/ [R=302,L]
    RewriteCond %{REQUEST_URI} ^/$ [NC]
    RewriteRule .* http://unihost.com/en/ [R=302,L]

    Где:

    RewriteEngine On – включение модуля Rewrite
    GeoIPEnable On – включение модуля GeoIP
    RewriteCond %{REQUEST_URI} ^/$ [NC] – если зарос приходит на корень сайта “/” без явно указанной страницы
    RewriteCond %{ENV:GEOIP_COUNTRY_CODE} (RU|UA) [NC] – и странна Россия или Украина
    RewriteRule .* http://unihost.com/ru/ [R=302,L] – выполняем редирект на русскую версию сайта
    RewriteCond %{REQUEST_URI} ^/$ [NC] – если зарос приходит на корень сайта “/” без явно указанной страницы
    RewriteRule .* http://unihost.com/en/ [R=302,L] – методом исключения выполняем редирект на англоязычную версию сайта



    Блокировка по странам
    В случае как с перенаправлением, так же и с блокировкой. Есть возможность заблокировать того или иного посетителя в зависимости от страны. Для этого в .htaccess необходимо добавить следующий код:

    GeoIPEnable On
    SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry
    SetEnvIf GEOIP_COUNTRY_CODE UA BlockCountry
    Deny from env=BlockCountry

    Где:

    GeoIPEnable On – включение модуля GeoIP
    SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry – создание некоего массива (цепочки) BlockCountry в которую вноситься условие что страна CN – Китай
    SetEnvIf GEOIP_COUNTRY_CODE FR BlockCountry – тоже самое что и предыдущая строка, только страна в этом случае Франция
    Deny from env=BlockCountry – блокирование стран которые находятся в цепочке BlockCountry
     
  2. Герман

    Герман Новичок

    Регистрация:
    21 окт 2019
    Сообщения:
    1
    Симпатии:
    0
    Артур, отличная статья. Очень помогла. Спасибо. Скажите, а можно сделать редирект сразу на все страницы?
     

Партнеры