Для того чтобы ограничить доступ к сайту на Битрикс только для пользователей из России, можно настроить ограничения на уровне веб-сервера, например, используя Apache или Nginx, а также геолокацию IP-адресов. Один из способов сделать это — с использованием модуля GeoIP либо если у вас используется Cloudflare, то можно настроить правила доступа через панель Cloudflare. Создайте правило для блокировки доступа для всех стран, кроме России.
Альтернативный способ (через PHP):
Если у вас есть доступ только к папке сайта на Битрикс, а конфигурацию веб-сервера (Apache или Nginx) изменить нельзя, вы можете использовать код проверки страны через php
, тут важно учесть, что проверка должна выполняться до загрузки любых заголовков и основного контента сайта. Идеальное место для проверки — в самом начале файла header.php
в шаблоне сайта, перед вызовами require()
и любыми HTML или PHP конструкциями, которые выводят данные на страницу.
Код проверки с использование стороннего API для геолокации
Мы будем реализовать проверку страны с помощью PHP и API для определения геолокации на основе IP-адреса с помощью сервиса ipinfo.io, вот пример, как это можно сделать:
// Получаем текущий URL страницы $request_uri = $_SERVER['REQUEST_URI']; // Если это главная страница (URI == '/'), выводим заглушку if ($request_uri == '/') { echo file_get_contents('https://адрес-сайта/access-denied.html'); exit; } // Если не главная страница, проверяем IP $ip = $_SERVER['REMOTE_ADDR']; // URL для получения информации о стране $api_url = "http://ipinfo.io/{$ip}?token=ВАШ_ТОКЕН"; // Регистрируемся на http://ipinfo.io/ и получаем токен, бесплатно у нас есть 50000 запросов // Инициализация CURL для запроса $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $api_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); // Проверяем, был ли успешный ответ от API if ($response === false) { echo 'Ошибка при получении данных о стране'; exit; } // Декодируем JSON ответ $data = json_decode($response, true); // Получаем код страны из ответа $country_code = $data['country'] ?? ''; // Если страна не Россия, выводим заглушку и прекращаем выполнение скрипта if ($country_code !== 'RU') { echo file_get_contents('https://адрес-сайта/access-denied.html'); exit; }
Пояснение:
- CURL используется для запроса к API. Устанавливаются параметры, чтобы получить ответ в формате JSON.
- Ответ от API декодируется через
json_decode
, и извлекается код страны ($data['country']
). - Если страна не Россия (код страны не
'RU'
), выводится заглушка.
Этот код будет работать без сохранения каких-либо данных о пользователе, каждый запрос будет проверяться заново.
Итог:
- Пользователи с иностранным IP увидят заглушку
access-denied.html
, при этом URL в адресной строке останется неизменным (главная страница или любая другая). - Пользователи из России будут видеть обычный сайт.