Строчка [QUOTE]header('Last-Modified: '.gmdate('D, d M Y H:i:s'). ' GMT'); [/QUOTE]всего лишь отдаст поисковому боту заголовок Last-Modified с текущей датой сервера. Насколько я знаю из общения с СЕО-ками это не только не даст никакого эффекта, но и даже вредно, т.к. бот воспринимает это за попытку ускорить индексацию сайта посредством манипулирования этим заголовком.
По поводу нагрузки на сервер: т.к. в этом решении не обрабатывается запрос If-Modified-Since, следовательно 304 заголовок не будет отдан и запрашивающая сторона не узнает о том, что страница не изменилась и запросит её в обычном порядке.
Вот моя версия решения проблемы. Работает для элементов инфоблоков и страниц, реализованных через файлы.
[CODE]if(!headers_sent())
{
header("Content-type: text/html; charset=".LANG_CHARSET);
/**
* Last Modified
**/
if(CModule::IncludeModule("iblock"))
{
$arFilter = Array("ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y", 'CODE' => $_REQUEST['ELEM_CODE']);
$res = CIBlockElement::GetList(Array(), $arFilter, false);
while($ob = $res->GetNextElement())
{
$arFields = $ob->GetFields();
}
}
$last_modified_time = (!empty($arFields)) ? strtotime($arFields['TIMESTAMP_X']) : filemtime(__FILE__);
header("Cache-Control: public");
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) >= $last_modified_time)
{
header('HTTP/1.1 304 Not Modified'); exit();
}
header('Last-Modified: '.gmdate('D, d M Y H:i:s', $last_modified_time).' GMT');
}
[/CODE]
Данный код можно поместить в \bitrix\modules\main\include\prolog_after.php, заменив им фрагмент:
[CODE]if(!headers_sent())
header("Content-type: text/html; charset=".LANG_CHARSET);
[/CODE]
В фильтре (массив $arFilter) необходимо указать вместо 'CODE' => $_REQUEST['ELEM_CODE'] условие, которое актуально для вашего ресурса.
Проверить результаты можно [url=http://last-modified.com/ru/if-modified-since.html]здесь[/url].
По поводу нагрузки на сервер: т.к. в этом решении не обрабатывается запрос If-Modified-Since, следовательно 304 заголовок не будет отдан и запрашивающая сторона не узнает о том, что страница не изменилась и запросит её в обычном порядке.
Вот моя версия решения проблемы. Работает для элементов инфоблоков и страниц, реализованных через файлы.
[CODE]if(!headers_sent())
{
header("Content-type: text/html; charset=".LANG_CHARSET);
/**
* Last Modified
**/
if(CModule::IncludeModule("iblock"))
{
$arFilter = Array("ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y", 'CODE' => $_REQUEST['ELEM_CODE']);
$res = CIBlockElement::GetList(Array(), $arFilter, false);
while($ob = $res->GetNextElement())
{
$arFields = $ob->GetFields();
}
}
$last_modified_time = (!empty($arFields)) ? strtotime($arFields['TIMESTAMP_X']) : filemtime(__FILE__);
header("Cache-Control: public");
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) >= $last_modified_time)
{
header('HTTP/1.1 304 Not Modified'); exit();
}
header('Last-Modified: '.gmdate('D, d M Y H:i:s', $last_modified_time).' GMT');
}
[/CODE]
Данный код можно поместить в \bitrix\modules\main\include\prolog_after.php, заменив им фрагмент:
[CODE]if(!headers_sent())
header("Content-type: text/html; charset=".LANG_CHARSET);
[/CODE]
В фильтре (массив $arFilter) необходимо указать вместо 'CODE' => $_REQUEST['ELEM_CODE'] условие, которое актуально для вашего ресурса.
Проверить результаты можно [url=http://last-modified.com/ru/if-modified-since.html]здесь[/url].