При разработке и тестировании сайтов часто возникает необходимость временно скрыть его от посторонних глаз. Встроенное в 1С-Битрикс решение — кнопка «Временное закрытие публичной части сайта» — действует радикально: доступ остается только у администраторов. Это не подходит, когда нужно протестировать функционал для зарегистрированных клиентов, проверить цены для разных групп или показать сайт заказчику, у которого есть свой аккаунт.
В этой статье рассмотрим, как реализовать более гибкий сценарий: закрыть сайт только для гостей, сохранив полный доступ для всех авторизованных пользователей.
Шаг 1: Подготовка страницы-заглушки
Сначала создайте HTML-страницу, которую увидят неавторизованные посетители. Сохраните её как /bitrix/php_interface/include/site_closed.php.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Сайт временно закрыт</title>
</head>
<body>
<h1>Мы работаем над улучшением сайта!</h1>
<p>Приносим извинения за временные неудобства. Сайт временно недоступен для гостей.</p>
<p>Если у вас есть аккаунт, <a href="https://blog.bxstudio.ru/auth/">авторизуйтесь</a>.</p>
</body>
</html>
Шаг 2: Добавление PHP-кода
Ключевой частью решения является обработчик события, который срабатывает на каждой странице до начала основной части (OnProlog). Добавьте этот код в файл init.php, расположенный в /bitrix/php_interface/init.php.
<?php
AddEventHandler("main", "OnProlog", "CloseSiteForGuests");
/**
* Закрывает доступ к публичной части сайта для неавторизованных пользователей.
* Все авторизованные пользователи (любой группы) сохраняют доступ.
*/
function CloseSiteForGuests() {
global $USER, $APPLICATION;
// Получаем массив групп текущего пользователя
$userGroups = $USER->GetUserGroupArray();
// Группа "Все пользователи (в том числе неавторизованные)" имеет ID = 2
$isNotAuthorized = (count($userGroups) == 1 && in_array(2, $userGroups));
// Проверяем, что мы не в админке Битрикс
$isAdminSection = (strpos($APPLICATION->GetCurPage(), '/bitrix/admin/') !== false);
// Если пользователь не авторизован и не в админке — показываем заглушку
if ($isNotAuthorized && !$isAdminSection) {
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/php_interface/include/site_closed.php");
die; // Останавливаем дальнейшее выполнение скрипта
}
}
?>
Принцип работы и логика кода
$USER->GetUserGroupArray() — получает список ID групп, к которым принадлежит текущий посетитель.
- Ключевая проверка: Неавторизованный пользователь (гость) всегда состоит ровно в одной группе — "Все" (ID=2). Если
count($userGroups) == 1 и эта единственная группа — группа "Все", значит, перед нами гость.
- Исключение админки: Важно убедиться, что мы не блокируем доступ к самой админке Битрикс (
/bitrix/admin/). Это проверяется с помощью strpos(...) === false.
- Вывод заглушки: Если оба условия соблюдены, подключается ваш файл
site_closed.php, и выполнение скрипта прекращается (die).
Заключение
Такое решение позволяет гибко управлять доступом к сайту во время разработки или тестирования. Вы можете показывать сайт только зарегистрированным пользователям, не трогая административную панель. Код не требует изменения ядра, легко отключается и не влияет на производительность при обычной работе сайта.
При разработке и тестировании сайтов часто возникает необходимость временно скрыть его от посторонних глаз. Встроенное в 1С-Битрикс решение — кнопка «Временное закрытие публичной части сайта» — действует радикально: доступ остается только у администраторов. Это не подходит, когда нужно протестировать функционал для зарегистрированных клиентов, проверить цены для разных групп или показать сайт заказчику, у которого есть свой аккаунт.
В этой статье рассмотрим, как реализовать более гибкий сценарий: закрыть сайт только для гостей, сохранив полный доступ для всех авторизованных пользователей.
Шаг 1: Подготовка страницы-заглушки
Сначала создайте HTML-страницу, которую увидят неавторизованные посетители. Сохраните её как
/bitrix/php_interface/include/site_closed.php.Шаг 2: Добавление PHP-кода
Ключевой частью решения является обработчик события, который срабатывает на каждой странице до начала основной части (OnProlog). Добавьте этот код в файл
init.php, расположенный в/bitrix/php_interface/init.php.Принцип работы и логика кода
$USER->GetUserGroupArray()— получает список ID групп, к которым принадлежит текущий посетитель.count($userGroups) == 1и эта единственная группа — группа "Все", значит, перед нами гость./bitrix/admin/). Это проверяется с помощьюstrpos(...) === false.site_closed.php, и выполнение скрипта прекращается (die).Заключение
Такое решение позволяет гибко управлять доступом к сайту во время разработки или тестирования. Вы можете показывать сайт только зарегистрированным пользователям, не трогая административную панель. Код не требует изменения ядра, легко отключается и не влияет на производительность при обычной работе сайта.