Как закрыть доступ к страницам сайта из других стран средствами PHP
название сайта
Авторизация

Как запретить доступ к сайту из других стран средствами PHP?

+1
SEO оптимизация / Вебмастер0 комментариев
Бывает так, что по какой-то причине вам потребовалось заблокировать доступ к вашему сайту (или отдельному его элементу) тому или иному городу, стране.
 
Эта необходимость может возникнуть при обнаружении подозрительного трафика (активности) из определенных стран (городов), локальном предоставлении тех или иных услуг и прочее. Задачи перед вами могут стоять абсолютно разные, я же сегодня покажу, как именно можно их решить.

запретить доступ к сайту из других стран

Блокировка доступа к сайту для определенной страны или города


Как вы понимаете, чтобы заблокировать посетителю сайта доступ по его стране или городу, эту (его) страну или город сначала нужно определить. Как это можно сделать, вы найдете в этом посте.
Далее, на самом деле, всё просто: по примеру из того же поста мы составляем условие и в случае его выполнения заблокируем загрузку основного содержимого сайта с выводом соответствующего сообщения.
Простой пример на PHP (функцию возьмете из поста выше) выглядит следующим образом:

header('Content-Type: text/html; charset=utf-8'); // Установим кодировку страницы
/*
    Здесь должна быть функция из поста https://www.pandoge.com/post/756
*/
$getUserGeo = getUserGeo();
if($getUserGeo['status'] == 'success') { // Если получили данные от сервиса
    if($getUserGeo['country'] != 'Russia') { // Если посетитель не из России
    
        // Устанавливаем 503 ответ от сервера (сервис недоступен)
        
        @header('HTTP/1.1 503 Service Temporarily Unavailable');
        @header('Status: 503 Service Temporarily Unavailable');
        echo <<<HTML
    
            <!DOCTYPE html>
            <html lang="ru">
                
                <head>
            
                    <title>Сайт временно недоступен</title>
                    
                    <style>
                        body {
                            padding: 0;
                            margin: 0;
                            background: #f4f4f4;
                        }
                        h1 {
                            color: #333;
                            text-align: center;
                            font-size: 22px;
                            font-weight: 400;
                            padding: 30px 0 0 0;
                        }
                    </style>
                
                </head>
                
                <body>
                
                    <h1>Извините, но для Вашей страны заблокирован доступ к нашему сайту =(</h1>
                </body>
                
            </html>
HTML;
        die();
    }
} else { // Если НЕ получили данные от сервиса
    /*
        Выполняем нужное действие, например, отправляем уведомление на почту.
        В нашем случае - просто остановка скрипта.
    */
    die();
}


В общем случае (так скажем, для быстрого старта) данный скрипт нужно вставлять в самый верх главного файла вашего проекта. Чаще всего это файл index.php, который находится в корневой (главной) папке сайта. Я же рекомендую делать это, учитывая особенности используемой CMS. Если у вас сомнения с тем, куда же именно вставить этот код – пишите в комментариях, постараюсь вам помочь.
Для экономии места и поддержания чистоты кода проекта скрипт блокировки можно вынести в отдельный файл и подключить в том же месте (верх файла index.php) через:

include_once './lock.php';

Где «./lock.php» – название скрипта и путь до него на вашем хостинге.

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


Что касается сообщения о блокировке, визуально оно выглядит так:


Доступ к сайту закрыт


Изменить его можно, внеся правки между:
echo <<<HTML
    …
HTML;

Здесь можно использовать любые HTML-теги, CSS-стили или скрипты, всё как при обычной верстке.


Скрытие/показ части (элемента) сайта для определенной страны или города


Выше мы рассмотрели пример полной блокировки сайта по заданным критериям, но помимо этого, можно и частично ограничить доступ к тому или иному его элементу.
Здесь, как и в варианте с полной блокировкой, мне трудно дать вам универсальное решение, поскольку каждая CMS имеет свои рекомендации по внедрению подобного рода кода, поэтому я покажу вам реализацию на примере CMS WordPress, а решения для остальных CMS по вашему запросу мы перенесем в комментарии.

1. Функцию определения геопозиции (напоминаю, найти её вы сможете здесь) вы вставляете в конец файла functions.php темы вашего сайта.

2. Далее (в теме сайта) оборачиваем нужный блок (элемент) в подобного рода условие:
<?php
    $getUserGeo = getUserGeo();
    if($getUserGeo['status'] == 'success'): // Если получили данные
        if($getUserGeo['country'] == 'Russia'): // Если посетитель из России
?>
            
            Необходимое содержимое для посетителей из России
<?php
        endif;
    endif;
?>

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

<?php
    $getUserGeo = getUserGeo();
    if($getUserGeo['status'] == 'success'): // Если получили данные
        if($getUserGeo['country'] == 'Russia'): // Если посетитель из России
?>
            
            Необходимое содержимое для посетителей из России
            
<?php
        else:
?>
            Необходимое содержимое для посетителей НЕ из России
<?php
        endif;
    endif;
?>

Здесь я составил условие: если посетитель из России – показываем одно содержимое, в противном случае – другое.
В качестве содержимого могут быть рекламные блоки (РСЯ, Google Adsense и других), тексты, изображения и другие, как такового ограничения здесь нет.

Источник https://www.pandoge.com/post/256
Читайте также

Отметьте картинки:*
new.thin.kiev.ua
Авторизация