При добавлении нового сайта автоматически создаётся раздел «Страница не найдена». Содержимое данной страницы будет отображаться в том случае, если посетитель попал на несуществующую либо на удалённую страницу.
На странице можно отображать произвольное содержимое (текст, ссылки), карту сайта, информативные сообщения и т.д.
Если такая страница открывается, она отдаёт заголовок «404 Not Found», что верно с точки зрения поисковых систем.
Иногда возникают ситуации, при которых такой заголовок нужно применить для выключенной страницы. В этом случае заголовок можно прописать вручную (в макете дизайна либо в компоненте) следующую строку:
header($_SERVER['SERVER_PROTOCOL'] . " 404 Not Found");
В компоненте эту строку можно разместить в поле «Системные настройки».
Рассмотрим ситуацию: пользователь или редактор отключают сообщение, но страница с полным просмотром сообщения остаётся доступной, в том числе поисковым системам. Для них вместо заголовка «200 OK» нужно отдать «404 Not Found». В системных настройках можно прописать следующее:
<? // Мы на странице полного просмотра и просматриваемый объект выключен if ($action === 'full' && !$nc_core->message->get_by_id($classID, $message, 'Checked')) { // Относительный путь к странице с 404-ой ошибкой из настроек сайта $e404_subdivision_path = $nc_core->subdivision->get_by_id($current_catalogue['E404_Sub_ID'], 'Hidden_URL'); // Абсолютный путь к странице с 404-ой ошибкой из настроек сайта $e404_url = nc_get_scheme() . '://' . $current_catalogue['Domain'] . $e404_subdivision_path; // Содержимое страницы с 404-ой ошибкой из настроек сайта $e404_content = file_get_contents($e404_url, false, stream_context_create(array('http' => array('ignore_errors' => true)))); // Установка заголовка 404 Not Found header(nc_array_value($_SERVER, 'SERVER_PROTOCOL', 'HTTP/1.0') . ' 404 Not Found', true, 404); // Вывод содержимого страницы с 404-ой ошибкой из настроек сайта die($e404_content); }
Обратите внимание, что при попытке просмотра страницы профиля пользователя данный код будет всегда генерировать 404-ую ошибку. Проверку существования пользователей нужно проводить иначе, либо отключить генерацию 404-ых ошибок при просмотре профилей пользователей, добавив такое условие в пример выше:
$nc_core->get_settings('user_list_cc', 'auth') != $cc
Если необходимо включить подобное поведение во всех компонентах на сайте, вышеупомянутый код можно разместить в макете дизайна в поле «Шаблоны вывода навигации».
Рассмотрим другой пример, когда необходимо отдать заголовок «404 Not Found» для выключенных разделов.
Указанный ниже код необходимо разместить в макете дизайна в поле "Шаблоны навигации":
<?php // Эта проверка обязательная, поскольку мы будем собирать содержимое 404-ой страницы $is_404_page = +$sub === +$current_catalogue['E404_Sub_ID']; // Эта проверка обязательная, поскольку обычно на сайтах титульная страница представлена выключенным разделом $is_title_page = +$sub === +$current_catalogue['Title_Sub_ID']; // Просматриваемый раздел выключен и это не главная страница или страница о 404-ой ошибке if (!$nc_core->subdivision->get_by_id($sub, 'Checked') && !$is_404_page && !$is_title_page) { // Относительный путь к странице с 404-ой ошибкой из настроек сайта $e404_subdivision_path = $nc_core->subdivision->get_by_id($current_catalogue['E404_Sub_ID'], 'Hidden_URL'); // Абсолютный путь к странице с 404-ой ошибкой из настроек сайта $e404_url = nc_get_scheme() . '://' . $current_catalogue['Domain'] . $e404_subdivision_path; // Содержимое страницы с 404-ой ошибкой из настроек сайта $e404_content = file_get_contents($e404_url, false, stream_context_create(array('http' => array('ignore_errors' => true)))); // Установка заголовка 404 Not Found header(nc_array_value($_SERVER, 'SERVER_PROTOCOL', 'HTTP/1.0') . ' 404 Not Found', true, 404); // Вывод содержимого страницы с 404-ой ошибкой из настроек сайта die($e404_content); }
Не забудьте исключить из этой проверки выключенные разделы, доступ к которым необходим для функционирования вашего сайта.