Цитата |
---|
написал: Аналогичная проблема, знает кто решения на сегодняшний день?) |
Столкнулся с той же проблемой. Хостеры сказали, что делать для них это через nginx хлопотное дельце. Нашел вот такое решение, но еще не тестировал.
Цитата |
---|
Вот код который использую я (работает и в случае с NGINX). Что бы не модифицировать ядро этот участок кода вставляете в /bitrix/admin/php_interface/init.php. <? AddEventHandler('main', 'OnEpilog', array('CBDPEpilogHooks', 'CheckIfModifiedSince')); class CBDPEpilogHooks { function CheckIfModifiedSince() { GLOBAL $lastModified; if (!$lastModified) $lastModified=time()-1000; if ($lastModified) { header("Cache-Control: public"); header('Last-Modified: '.gmdate('D, d M Y H:i:s', $lastModified).' GMT');
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) >= $lastModified) { header('HTTP/1.1 304 Not Modified'); exit(); } } } } ?>
Глобальная переменная $lastModified определяет время изменения страницы. Для страницы детального просмотра элемента определить ее можно так: 1) в result_modifier.php шаблона компонента детального просмотра сохраняем TIMESTAMP_X в кеше компонента: $cp = $this->__component; // объект компонента if (is_object($cp)) $cp->SetResultCacheKeys(array('TIMESTAMP_X'));
2) в component_epilog.php того же шаблона определяем переменную $lastModified: GLOBAL $lastModified; if (!$lastModified) $lastModified = MakeTimeStamp($arResult['TIMESTAMP_X']); else $lastModified = max($lastModified, MakeTimeStamp($arResult['TIMESTAMP_X'])); |
Если кто-то вдруг тестировал и не получилось, то скажите, чтобы мы время не тратили.