2310

Плагин Last-Modified / 304 Not Modified


Проверить корректность настройки можно на сайте: http://last-modified.com Для Revo существует пакет modLastModified, для Evo чуть сложнее: Сделать автоподгрузку заголовков Last-Modified / 304 Not Modified можно при помощи следующего плагина Системные события: OnWebPagePrerender Код плагина:

<?php
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']) &amp;& 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
{
        //тут можно выполнять код для обычного посетителя
}
?>

Комментарии

8 месяцев назад
Там амперсанд в последнем условии превратился в HTML символ &
Там амперсанд в последнем условии превратился в HTML символ &
Комментировать