function DetectSearchEngine($USER_AGENT) { $engines = array( array('Aport', 'Aport'), array('Google', 'Google'), array('msnbot', 'MSN'), array('Rambler', 'Rambler'), array('Yahoo', 'Yahoo'), array('Yandex', 'Yandex'), array('Aport', 'Aport robot'), array('Google', 'Google'), array('msnbot', 'MSN'), array('Rambler', 'Rambler'), array('Yahoo', 'Yahoo'), array('AbachoBOT', 'AbachoBOT'), array('accoona', 'Accoona'), array('AcoiRobot', 'AcoiRobot'), array('ASPSeek', 'ASPSeek'), array('CrocCrawler', 'CrocCrawler'), array('Dumbot', 'Dumbot'), array('FAST-WebCrawler', 'FAST-WebCrawler'), array('GeonaBot', 'GeonaBot'), array('Gigabot', 'Gigabot'), array('Lycos', 'Lycos spider'), array('MSRBOT', 'MSRBOT'), array('Scooter', 'Altavista robot'), array('AltaVista', 'Altavista robot'), array('WebAlta', 'WebAlta'), array('IDBot', 'ID-Search Bot'), array('eStyle', 'eStyle Bot'), array('Mail.Ru', 'Mail.Ru Bot'), array('Scrubby', 'Scrubby robot'), array('Yandex', 'Yandex') ); foreach ($engines as $engine) { if (stristr($USER_AGENT, $engine[0])) { return($engine[1]); } } return (false); } //определяем поисковой ли бот пришёл к нам $detect = DetectSearchEngine($_SERVER['HTTP_USER_AGENT']); //если бот то if ($detect) { //Получаем время изменения ресурса из таблички site_content $last_modified_time = $modx->documentObject['editedon']; //Если поисковик спрашивает у сервера: у меня есть эта страница в кэше с определённого времени, изменилась ли она? //смотрим на время, сверяем: if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) >= $last_modified_time){ //Если НЕ изменилась то отправляем 301 ответ header('HTTP/1.1 304 Not Modified'); //И убиваем выполнение дальнейших скриптов, то есть сервер кроме ответа заголовка не шлёт саму страничку die; } //устанавливаем поисковику Last-Modified если он первый раз на странице либо если страница обновлена. header('Last-Modified: '.gmdate('D, d M Y H:i:s', $last_modified_time).' GMT'); } else { //тут можно выполнять код для обычного посетителя } ?>
Плагин Last-Modified / 304 Not Modified
MODX Evolution
21-09-2015
Проверить корректность настройки можно на сайте: http://last-modified.com
Для Revo существует пакет modLastModified, для Evo чуть сложнее:
Сделать автоподгрузку заголовков Last-Modified / 304 Not Modified можно при помощи следующего плагина
Системные события: OnWebPagePrerender
Код плагина: