Битрикс. Настройка страницы 404

Как ни странно, но даже с такой простой функцией сайта, как отображать 404 страницу, у Битрикса может возникать множество сложностей, в основном из-за криворукости и дерьмовых готовых решений с Маркетплейса (а их там вагон и тележка).

В большинстве форумов и различных блогах, советует решать эту проблему добавлением событий в файл init.php, прописывать в nginx:

error_page 404 /404.php;

Этот путь решения неверен, чтобы все правильно работало не нужно что-то специально добавлять. Главное найти разобраться и найти причину.

Поехали!

404 страница при отсутствующей странице

Для начала необходимо понять отображается ли 404 страница при запросе на несуществующую страницу или раздел. Набираем несуществующую страницу и видим 404 ошибку, если нет, то в корне сайта отсутствует файл 404.php.

Создаем файл 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("Страница не найдена");
$APPLICATION->SetPageProperty("keywords", "Страница не найдена");
$APPLICATION->SetPageProperty("description", "Страница не найдена");
?>

<p>Например, текст типа .. ошибка 404 </p>

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

На верстку можете не смотреть, можно вообще все отсюда спилить и оставить только надпись 404. Главное, чтобы в этом файле присутствовали следующие строки:

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

Дальше, смотрим какая страница отображается вместо 404 страницы, но на этот вариант почему-то все усиленно забивают х@r и начинают писать невероятные функции с событиями или лезут редактировать конфигурационный файл веб-сервера.

Если отображается, например, страница со списком новостей, то значит в вашем файле urlrewrite.php есть неверная CONDITION**, которая, например она будет выглядеть вот так:

array (
    'CONDITION' => '#^/#',
    'RULE' => '',
    'ID' => 'bitrix:news',
    'PATH' => '/news/index.php',
    'SORT' => 100,
),

Такое происходит потому, что при настройке компонента bitrix:news на странице /news/index.php было указано вот так:

"SEF_MODE" => "Y",
"SEF_FOLDER" => "/",

Меняем на правильный вариант:

"SEF_MODE" => "Y",
"SEF_FOLDER" => "/news/",

Пересохраняем файл правил обработки адресов на странице /urlrewrite.php и страница с ошибкой заработает.

Других ситуаций в принципе возникнуть не может, в nginx если вы используете BitrixVM, ничего менять не надо. Если вы зачем-то сами писали конфиг для nginx, то за появление ошибки отвечают опции:

error_page 404 405 412 502 504 = @bitrix;

или

try_files  $uri $uri/ @bitrix;

Для веб-сервера Apache это строки файла .htaccess:

ErrorDocument 404 /404.php

Для Windows Server правило для 404 ошибки находится в строчках файла web.config:

<httpErrors>
    <remove statusCode="404" subStatusCode="-1" />
    <error statusCode="404" path="/404.php" responseMode="ExecuteURL" />
</httpErrors>

404 страница при отсутствующем элементе инфоблока

Тут все еще проще. У стандартных компонентов есть настройки:

"SET_STATUS_404" => "Y", // Устанавливать статус 404
"SHOW_404" => "Y", // Показ специальной страницы

Они и должны быть включены, то есть иметь значение Y или стоять чекбокс, если вы настраиваете в редакторе компонента.

Код ответа сервера 200

В этом случае открываем настройку главного модуля и убираем галку с опции Посылать в заголовке статус 200 на 404 ошибку.

Количество просмотров: 138

Оригинал статьи был на сайте компании, которой уже нет, как и сайта...


Понравилась статья?

Возврат к списку