Вывод HTTP заголовка Last-Modified и If-Modified-Since в 1С-Битрикс
718
Заголовок Last-Modified система управления 1С-Битрикс "по умолчанию из коробки" не передает. Это одна из "SEO-проблем" 1С-Bitrix. Обсуждение этого вопроса уже давно ведется на форуме разработчиков. Представлю вашему вниманию готовый код, он будет работать если хотя бы один стандартный компонент заполняет время модификации страницы. В компонентах должна быть включена опция "Устанавливать в заголовках ответа время модификации страницы". Это один из способов передать заголовок 304 Not Modified на запрос If-Modified-Since.
Это готовый код, он будет работать если хотя бы один стандартный компонент заполняет время модификации страницы.
Вот код который использую я на сайтах (работает он и в случае с NGINX). Что бы не модифицировать ядро этот участок кода вставляете в файл /bitrix/admin/php_interface/init.php. Если нет такого файла, то вам необходимо создать его. use \Bitrix\Main\EventManager, \Bitrix\Main\Context; /** * Отвечает на заголовок If-Modified-Since */ EventManager::getInstance()->addEventHandler("main", "OnEndBufferContent", "setIfModifiedSince"); class bxHttpResponse extends \Bitrix\Main\HttpResponse { function getLastModified($obj) { return $obj->lastModified; } } function setIfModifiedSince() { if (function_exists('apache_request_headers')) { $arHeaders = array_change_key_case(apache_request_headers(), CASE_UPPER); if ($ifModifiedSince = $arHeaders['IF-MODIFIED-SINCE']) { $date = \DateTime::createFromFormat( "D, d M Y H:i:s T", $ifModifiedSince ); $ob = new bxHttpResponse; if ($lastModified = $ob->getLastModified(Context::getCurrent()->getResponse())) { if ($date->getTimestamp() > $lastModified->getTimestamp()) { // Прямое сравнение не работает :( Context::getCurrent()->getResponse()->setStatus("304 Not Modified"); } } } } } Помощь проекту
Привет, меня зовут Вика! Я являюсь автором сайта Weblim.
Если Вам помогла данная статья, вы можете отблагодраить меня перечислив любую денежную сумму. Заранее спасибо! |
Последние записи
|