Интересные статьи

После решения задачи, хочется рассказать об этом

Настройка страницы 404 на битриксе

Т.к. часто приходится настраивать 404 ошибку на битриксе, решил оставить заметку для себя, чтобы не держать все в голове, может кому также пригодится

Создаем файл с несуществующей страницей

Возникает ситуация, когда элемент не найден или раздел не существует, поэтому необходимо показать страницу с информацией об этом и выдать браузеру ответ 404 в битрикс. Для начала создадим в корне сайта файл /404.php и поместим туда следующую информацию

include_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/urlrewrite.php');

CHTTP::SetStatus("404 Not Found");
@define("ERROR_404","Y");

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");

$APPLICATION->SetTitle("Страница не найдена");

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");

Создаем условие в компоненте

Если при переходе например в карточку товара, элемент не был найден, комплексные компоненты позволяют поставить галочку в настройках показывать error 404, вместо сообщения "Элемент не существует". В другом случае, когда такой возможности не предусмотрено, в простых компонентах, чтобы показать страницу 404.php необходимо объявить в коде, при отсутствии элемента следующую константу

CHTTP::SetStatus("404 Not Found");
@define("ERROR_404","Y");

И далее в файле /local/php_interface/init.php необходимо отловить событие OnAfterEpilog

define("PREFIX_PATH_404", "/404.php");

AddEventHandler("main", "OnAfterEpilog", "Prefix_FunctionName");

function Prefix_FunctionName() {
    global $APPLICATION;
	
    // Проверка, нужно ли нам показывать содержимое страницы 404 на битрикс
    if (!defined('ERROR_404') || ERROR_404 != 'Y') {
        return;
    }

    // Отобразить страницу 404, если она еще не отображается
    if ($APPLICATION->GetCurPage() != PREFIX_PATH_404) {
        header('X-Accel-Redirect: '.PREFIX_PATH_404);
        exit();
    }
}

Очень просто в битрикс настроить 404 страницу

P.S.И не забудьте проверить наличие строчки ErrorDocument 404 /404.php в файле /.htaccess ,т.к. если раздел не будет найден также подключится файл 404.php