Для того чтобы ограничить доступ к сайту на Битрикс только для пользователей из России, можно настроить ограничения на уровне веб-сервера, например, используя 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 в адресной строке останется неизменным (главная страница или любая другая). - Пользователи из России будут видеть обычный сайт.