Найти тему
Online Business Development

1С-Битрикс - правильная настройка страницы 404

Даже с такой простой функцией сайта, как отображать 404 страницу возникает множество сложностей. В интернете все советует решать эту проблему добавлением событий в файл init.php, прописывать в nginx:

error_page 404 /404.php;

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

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

<div
class="container-error-page">
<
div class="error-page-big-text">
404
</
div>
<
div class="col col-12 ta-center">
<?$
APPLICATION->IncludeComponent(
"
bitrix:search.form",
"
bottom",
array(
"
COMPONENT_TEMPLATE" => "bottom",
"
PAGE" => SITE_DIR."search/index.php"
),
false
);?>
</
div>

<
p>
<
a href="/">Главная страница</a>
</
p>
<
p>
<
a href="search/map.php">Карта сайта</a>
</
p>
</
div>

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

Конечно ваша верстка может отличаться, как и содержимое этой страницы, важно чтобы в этом файл присутствовали следующие строчки:

CHTTP::SetStatus("404 Not Found");
@define("ERROR_404", "Y");
  • Смотрим какая страница отображается вместо 404 страницы, этот вариант почему-то все упускают и начинают городить функции с событиями или редактировать конфиг веб-сервера. Если отображается например страница со списком новостей, то значит в вашем файле 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/",

Делаем пересоздание правил обработки адресов на странице _/bitrix/admin/urlrewritereindex.php и страница с ошибкой заработает.

Других ситуаций в принципе возникнуть не может, в nginx если вы используете BitrixVM или например конфиг из нашей другой статьи 1С-Битрикс + Nginx + php-fpm + композитный сайт, ничего менять не надо. Если сами писали конфиг для 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 ошибку.

Оригинальная статья у нас на сайте https://onlinebd.ru/blog/1s-bitriks-pravilnaya-nastroika-stranicy-404

С подпиской рекламы не будет

Подключите Дзен Про за 159 ₽ в месяц