Kaspel
@Kaspel

Как реализовать 404 ошибку в bitrix?

Понимаю, что этот вопрос уже много раз обсуждался, но я так и не нашел на него ответ.
Компоненты настроил и на несуществующих страницах получаю 404 заголовок (в инструментах разработчика ).
Проблема в том, что проверка в init.php не срабатывает.
Предполагаю, что заголовок 404 получается позднее, пробовал разные hook, но не работает.
Если только почистить весь кеш браузера, то получаю 404(get_headers), но при обновлении страницы получаю 503 (get_headers).
Не подскажете в чем моя ошибка?

AddEventHandler("main", "OnBeforeEndBufferContent", "ChangeMyContent"); // и так не работает OnEpilog

function ChangeMyContent(&$content)
{
       //Так проверею ответ
	print_r(get_headers('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']));

	if(defined('ERROR_404') && ERROR_404 == 'Y') {
		$content = file_get_contents($_SERVER["DOCUMENT_ROOT"].'/bitrix/templates/.default/404.php');
                return;
	}
	CHTTP::SetStatus('404 Not Found');
}

Повторюсь, если просматривать заголовки полученные при загрузке страницы, 404 имеется, но вот как ее отловить в init.php?
  • Вопрос задан
  • 99 просмотров
Решения вопроса 1
@Anadi
Если вам помог мой ответ, отметьте его решением!
Попробуйте так в init.php
AddEventHandler("main", "OnEpilog", "_Check404Error", 1);

function _Check404Error() {
    if (defined("ERROR_404") && ERROR_404 == "Y" || CHTTP::GetLastStatus() == "404 Not Found") {
        global $APPLICATION;
        $APPLICATION->RestartBuffer();
        require $_SERVER["DOCUMENT_ROOT"] . SITE_TEMPLATE_PATH . "/header.php";
        require $_SERVER["DOCUMENT_ROOT"] . "/404.php";
        require $_SERVER["DOCUMENT_ROOT"] . SITE_TEMPLATE_PATH . "/footer.php";
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы