четверг, 12 июля 2012 г.

1С-Bitrix и ошибка 404

Проблема заключалась в следующем: при отдаче страницы с отсутствующим элементом или секцией инфоблока выставляется статус "404 Not Found" (в теле компонентов bitrix:news.list, bitrix:news.detail, bitrix:catalog.section, bitrix:catalog.element есть соответствующие строки, но, к сожалению, не было способа вывести содержимое 404-ой страницы (/404.php).

Можно было сделать редирект.
Но это было бы неправильно, потому что:
  • Пользователь, случайно введя ошибочный длинный URL перебрасывался на /404.php без возможности увидеть и исправить ошибку в строке адреса.
  • Поисковой робот, зайдя на ошибочную страницу, видел странную последовательность: при обращении к несуществующей странице он получал статус 301 Moved Permanently (в редких случаях "404 Not found" и переадресацию на страницу /404.php, которая выставляла статус "404 Not found".
Результатом этих размышлений стал код в init.php:
AddEventHandler("main", "OnEpilog", "Redirect404");
function Redirect404() {
if(
!defined('ADMIN_SECTION') &&
defined("ERROR_404") &&
file_exists($_SERVER["DOCUMENT_ROOT"]."/404.php")
) {
global $APPLICATION;
$APPLICATION->RestartBuffer();
CHTTP::SetStatus("404 Not Found");
include($_SERVER["DOCUMENT_ROOT"].SITE_TEMPLATE_PATH."/header.php");
include($_SERVER["DOCUMENT_ROOT"]."/404.php");
include($_SERVER["DOCUMENT_ROOT"].SITE_TEMPLATE_PATH."/footer.php");
}
}

Комментариев нет:

Отправить комментарий