После решения задачи, хочется рассказать об этом
Т.к. часто приходится настраивать 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