ООО ЭкоЮнит
FAQПоискПользователиГруппыФайлыВходРегистрацияГлавная
Версия для печати
 
АвторСообщение
vlad77 Пол:Муж.

Модератор


Зарегистрирован: 15.03.2008
Показать/Спрятать

Сергей, не подскажете как у вас сделано? Что бы как здесь, отдавались Last-Modified и Not Modified. см. last-modified.com/ru/


Скачать seo_mod_http_header.zip (14.13 KB). Добавлен/обновлён Пт 27 Мар, 2015 11:21. Скачано 35 раз(а).
Версия 2.0.2

ВверхНа форуме нет Профиль
Sergey Пол:Муж.


Местный босс - администратор


Зарегистрирован: 06.01.2005
Показать/Спрятать

В includes/functions.php воткнуть процедуру

Код:
function put_http_header()
{
    global $topic_id, $forum_id, $db, $userdata;
    
    if($userdata['session_logged_in']) return;
    
    $sql_and ='';
    if ($topic_id) 
    {
        $sql_and = 'p.topic_id = ' . $topic_id . ' AND ';
    }
    else if ($forum_id) 
    {
        $sql_and = 'p.forum_id = ' . $forum_id . ' AND ';
    }
    $sql = 'SELECT p.post_time, pt.post_text
            FROM ' . POSTS_TABLE . ' p, ' . POSTS_TEXT_TABLE . ' pt
                WHERE ' . $sql_and . ' pt.post_id = p.post_id 
                ORDER BY p.post_time DESC LIMIT 1';
    if (!($result = $db->sql_query($sql)))
    {
        message_die(GENERAL_ERROR, 'Could not query new post information', '', __LINE__, __FILE__, $sql);
    }
    $row = $db->sql_fetchrow($result);
    $db->sql_freeresult($result);
    $upd_time = $row['post_time'];
    $tag='"PUB' . crc32($row['post_text']) . '"';
    $no_update=TRUE; // no update, as default
    if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && (strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])>=$upd_time)) 
    { 
        $no_update=FALSE; 
    } 
    if (isset($_SERVER['HTTP_IF_NONE_MATCH'])) { // check ETag 
        if (strcmp($_SERVER['HTTP_IF_NONE_MATCH'], $tag) == 0) $no_update=FALSE; 
        else $no_update=TRUE; 
    } 
    if (!$no_update) { 
        if (substr(strtolower(@php_sapi_name()), 0, 3) === 'cgi') @header('Status: 304 Not Modified'); 
        else @header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified');
        @header('Date: ' . gmdate('D, d M Y H:i:s \G\M\T')); 
    } 
    @header('ETag: ' . $tag);  // The new TAG 
    @header('Last-Modified: '. gmdate('D, d M Y H:i:s \G\M\T', $upd_time)); 
    if (!$no_update) exit;
}


В index.php, viewforum.php, viewtopic.php после строк
Код:
init_userprefs($userdata);
//
// End session management
// 

Вставить вызов put_http_header();

_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор db_update.php для phpBB2 с некоторыми удобствами.
Как ставить моды. Что такое [SQL] и с чем его едят | Как правильно задавать вопросы и получать адекватные ответы | Правила форума
Бесплатная техподдержка только на форуме! Не надо стучаться в аську, скайп, слать емайлы, пытаться писать в приват. Спасибо за понимание. Please do not PM, ICQ, Skype or email me for support help - you won't get any reply. If you have a question or issue, post it in the appropriate forum/topic. Thanks!
ВверхНа форуме нет Профиль Сайт Имя в Skype
vlad77 Пол:Муж.

Модератор


Зарегистрирован: 15.03.2008
Показать/Спрятать

Спасибо!

Добавлено спустя 6 часов 51 минуту 47 секунд:

Браузеры себя странно ведут. Мозилла принимает Last-Modified и ETag. Опера ни в какую. А Иексплорер принимает только если после @header('Last-Modified: '. gmdate('D, d M Y H:i:s', $upd_time) . ' GMT'); вписать какой нибудь print '12345'; (контент то есть сразу вывести) Cool Neutral

Добавлено спустя 5 часов 53 секунды:

Sergey, скажите пожалуйста, наблюдалось ли у вас такое странное поведение браузеров?
ВверхНа форуме нет Профиль
Sergey Пол:Муж.


Местный босс - администратор


Зарегистрирован: 06.01.2005
Показать/Спрятать

Этому коду лет семь. Думаешь, я особо заморачивался с разными браузерами и вообще смотрел, как они себя ведут? Мне есть чем заняться.

Добавлено спустя 2 часа 16 секунд:

По поводу Last-Modified и ETag в разных браузерах читаем тему xpoint.ru/forums/i.....0834.xhtml
Насчет кэширования в Опере описано здесь:
xpoint.ru/forums/i.....5881.xhtml
otvety.google.ru/o.....8a2e35e846

_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор db_update.php для phpBB2 с некоторыми удобствами.
Как ставить моды. Что такое [SQL] и с чем его едят | Как правильно задавать вопросы и получать адекватные ответы | Правила форума
Бесплатная техподдержка только на форуме! Не надо стучаться в аську, скайп, слать емайлы, пытаться писать в приват. Спасибо за понимание. Please do not PM, ICQ, Skype or email me for support help - you won't get any reply. If you have a question or issue, post it in the appropriate forum/topic. Thanks!
ВверхНа форуме нет Профиль Сайт Имя в Skype
vlad77 Пол:Муж.

Модератор


Зарегистрирован: 15.03.2008
Показать/Спрятать

Имеет смысл отдавать эти заголовки только ботам. Если пользователь поменял аватару, подпись и т.п. То гости - пользователи Мозиллы будут видеть старые данные, а пользователи Оперы, соответственно новые. Еще проблема с капчей - будет показывать все время одну и ту же комбинацию знаков. И с другими антиспам модами.

Попытался решить эти проблемы. Так же при удалении сообщений обновляется дата темы (она обновляется при обращении к posting.php, и к modcp.php). Есть возможность сбросить даты всех тем форума на текущую. Возможность отдавать заголовки гостям оставлена, как тестовая опция и на случай необходимости срочно уменьшить нагрузку на сервер. Гостям заголовки в viewforum.php не отдаются (для глобального объявления и аналогичных модов, на случай удаления тем или переноса их в другие форумы). База ботов сделана на файлах, что бы не добавлять SQL запрос из-за нескольких ботов. Ботам создан режим "Read Only" (имеет смысл для форумов, где разрешено писать без регистрации).

Рекомендуется установить Guest Sessions MOD, т.к. сиды делают этот мод бесполезным. Взять его можно phpbb.com/comm.....p;t=185839

При портировании мода на phpBB3, обязательны ссылка на источник, и указание авторских прав (Porutchik и vlad77).

Скачивать из первого поста темы.
ВверхНа форуме нет Профиль
Sergey Пол:Муж.


Местный босс - администратор


Зарегистрирован: 06.01.2005
Показать/Спрятать

Сообщение Вс 12 Окт, 2014 22:11 Скачать сообщение Репутация: 88
 Функция для определения поисковых ботов
Мод не смотрел, но для определения бот/браузер я использую функцию. Однозначно ей доверять нельзя, так как некоторые боты могут шифроваться как обычные браузеры. Например, китаец Baiduspider (ip 180.76.15.*), тварь желтожопая, часто представляется обычной Лисой.

Код:
function isRobot($agent = '', &$robots_agent = '') 
{ 
    if (!isset ($_SERVER['REQUEST_METHOD']))
    {
        return false;
    }
    if (empty($agent))
    {
        $agent = $_SERVER['HTTP_USER_AGENT'];
    }
    
    $browser_detect = false; 
    
    if (stristr($agent, 'bot') === false && stristr($agent, 'mutant') === false)
    {    
        $Browsers = array( 
            'chrome', 'epiphany', 'firefox', 'khtml', 'konqueror', 'links', 'lynx', 'opr/',
            'msie', 'netscape', 'omniweb', 'opera', 'safari', 'webtv', 'w3m', 'trident'
        ); 

        foreach($Browsers as $Browser) 
        { 
            if (stristr($agent, $Browser) !== false) 
            {
                $browser_detect = true; 
                $robots_agent = $Browser;
                break;
            }
        } 
    }
    
    if (!$browser_detect)
    {
        $Robots = array( 
            'adre', 'aport', 'archive', 'ask jeeves', 'bot', 'crawl', 'find', 'goku', 'google', 'infoseek',
            'mail', 'msn',  'coccoc', 'find', 'goku', 'google', 'infoseek', 'search', 'slurp', 'spider', 'daum',
            'teoma', 'turtle', 'urllib', 'web', 'webalta', 'yahoo', 'yandex', 'mutant', 'riddler', 'omgili'
        ); 

        foreach($Robots as $Robot) 
        { 
            if (stristr($agent, $Robot) !== false) 
            {
                $robots_agent = $Robot;
                return true; 
            }
        } 
    }
    else
    {
        return false;
    }
    return (stristr($agent, 'mozilla') === false);
} 

Если интересно, USER_AGENT'ы поисковых роботов можно посмотреть в приложенном файле. Это те роботы. которые обращаются к robots.txt на сайте.

Добавлено спустя 6 минут 33 секунды:

Многие из них уже предзабиты в начальной базе phpBB3.


Скачать stats.zip (9.47 KB). Добавлен/обновлён Вс 12 Окт, 2014 22:11. Скачано 9 раз(а).
robots user agents


_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор db_update.php для phpBB2 с некоторыми удобствами.
Как ставить моды. Что такое [SQL] и с чем его едят | Как правильно задавать вопросы и получать адекватные ответы | Правила форума
Бесплатная техподдержка только на форуме! Не надо стучаться в аську, скайп, слать емайлы, пытаться писать в приват. Спасибо за понимание. Please do not PM, ICQ, Skype or email me for support help - you won't get any reply. If you have a question or issue, post it in the appropriate forum/topic. Thanks!
ВверхНа форуме нет Профиль Сайт Имя в Skype
vlad77 Пол:Муж.

Модератор


Зарегистрирован: 15.03.2008
Показать/Спрятать

Спасибо. Особенно за список ботов.
ВверхНа форуме нет Профиль
Василий_007

Участник


Зарегистрирован: 18.12.2014
Показать/Спрятать

Перед $template->pparse('body'); в viewtopic.php вставил
Код:
$LastModified_unix = strtotime($post_date);
$LastModified = gmdate("D, d M Y H:i:s \G\M\T", $LastModified_unix);
$IfModifiedSince = false;
if (isset($_ENV['HTTP_IF_MODIFIED_SINCE'])) $IfModifiedSince = strtotime(substr($_ENV['HTTP_IF_MODIFIED_SINCE'], 5));
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) $IfModifiedSince = strtotime(substr($_SERVER['HTTP_IF_MODIFIED_SINCE'], 5));
if ($IfModifiedSince && $IfModifiedSince >= $LastModified_unix) 
{header($_SERVER['SERVER_PROTOCOL'].' 304 Not Modified'); exit;}
header('Last-Modified: '.$LastModified);

Отдает вроде норм (даже слишком, учитывая дефолтный Cache-Control движка)
Брал отсюда: last-modified.com/ru/last-modified-if-modified-since-php.html
ВверхНа форуме нет Профиль
vlad77 Пол:Муж.

Модератор


Зарегистрирован: 15.03.2008
Показать/Спрятать

Василий_007 @ Пн 05 Янв, 2015 19:44 писал(а): (Просмотр сообщения)
Показать
Василий_007, при добавлении/изменении сообщений, страница как минимум должна заголовками Last-Modified и 304 Not Modified сообщать об этом поисковикам и браузерам. Иначе поисковики ваш форум забанят за клоакинг. А в браузерах (кроме иексплорера и оперы) пользователи будут все время видеть старую страницу.

Мод из этой темы ставьте.

Добавлено спустя 9 минут 20 секунд:

Прощу прощения, $post_date в вашем коде, это по видимому время постинга самого нижнего сообщения на странице, а не дата заведения темы (Дата заведения темы, в процессе жизни темы не меняется). Меняться при добавлении новых сообщений она будет.
Но у меня учтены модерация и редактирования темы, учтены боты, можно сбросить все Last-Modified на текущее время. Браузерам пользователей отдавать эти заголовки не рекомендуется, по крайней мере хотя бы залогиненым пользователям.
Ваш код будет приводить, например к тому, что пользователи мозиллы, отредактировав свое сообщение, не будут видеть результатов своего редактирования.
ВверхНа форуме нет Профиль
Василий_007

Участник


Зарегистрирован: 18.12.2014
Показать/Спрятать

Цитата: Показать

Он хорош, но слишком заковыристый.
Эти проверки по юзерагентах, имхо, немного стремная затея.
Как в принципе и этот 304 на ЦМС.
Поправите шаблон - страница УЖЕ изменилась, а дата та же...
Для того чтобы ставить 304 нужно понимать для чего оно надо, да и отдельно на форум смотреть..
ПС все равно делают переиндексацию когда захотят, несмотря на 304.
В моем случае плевать на нагрузку сервера ботами или охват страниц при заходе бота. Ставил ради сниппета с поиске, но когда гугл распознал что это форум, то начал игнорировать эту дату и выдает теперь в поиске дату первого сообщения( грешу на микроразметку

Мне проще обернуть это в !$userdata['session_logged_in']
и поправить в page_header.php
Код:
//header ('Cache-Control: no-cache, pre-check=0, post-check=0');
header ('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0'); 

Спасибо за эти замечания, недоглядел :/
ВверхНа форуме нет Профиль
vlad77 Пол:Муж.

Модератор


Зарегистрирован: 15.03.2008
Показать/Спрятать

Василий_007 @ Вт 06 Янв, 2015 11:14 писал(а): (Просмотр сообщения)
Показать
В тройке все проверяется на юзерагенты.
А в моде эта проверка сделана, что бы не было глюков у гостей. Например при смене кем то аватары, что бы гости (пользователи Мозиллы) видели новую аватару (т.е. что бы гостям заголовки не отдавать, а ботам отдавать).
Или сделайте как у Сергея, проверяйте только залогинен/не залогинен. Тогда, если где то можно писать гостям, надо будет в этих форумах Last-Modified и 304 Not Modified вообще не отдавать, потому что кроме разных вышеописанных глюков, у гостей (у кого мозилла) не будет работать капча и другие антиспам моды.

Здесь просто и одновременно качественно не получается.


P.S. Как ведет себя Хром с этими заголовками не знаю. Известно что Мозилла их обрабатывает, Опера не обрабатывает, а Иексплорер хоть и не обрабатывает, но написано что если очень-очень постараться то будет обрабатывать.

Добавлено спустя 5 минут 51 секунду:

Василий_007 @ Вт 06 Янв, 2015 11:14 писал(а): (Просмотр сообщения)
Показать
В моде после правки шаблона, достаточно в админке нажать кнопку "сбросить все Last-Modified на текущее время".
ВверхНа форуме нет Профиль
vlad77 Пол:Муж.

Модератор


Зарегистрирован: 15.03.2008
Показать/Спрятать

У меня мод стоит достаточно долго. Количество проиндексированных страниц увеличилось. А на нагрузку на сервер влияние мода не заметно. Возможно на маленьких форумах, где проиндексированы все страницы, он будет уменьшать нагрузку на сервер.

Мод обновлен до версии 2.0.1
В админку добавлен показ времени последнего сброса Last-Modified.
Если время Last-Modified тем одинаковое (темы созданные до установки мода, или до сброса Last-Modified, имеют одинаковое время), то теперь они отдают разный ETag, а не одинаковый, как было раньше.

Инструкция по обновлению находится в архиве.

Скачивать из первого поста темы.
ВверхНа форуме нет Профиль
vlad77 Пол:Муж.

Модератор


Зарегистрирован: 15.03.2008
Показать/Спрятать

Версия 2.0.2
Некоторые моды могут объявлять $phpbb_root_path = ''; , после чего не получается найти файл bots_array_file.php.

Поэтому код $phpbb_root_path . '/includes/bots_array_file.' . $phpEx; заменен на $phpbb_root_path . 'includes/bots_array_file.' . $phpEx;

Инструкция по обновлению находится в архиве.

Скачивать из первого поста темы.
ВверхНа форуме нет Профиль
vlad77 Пол:Муж.

Модератор


Зарегистрирован: 15.03.2008
Показать/Спрятать

У меня не проверялось, т.к. у меня к счастью php как модуль Apache.
Написано, что если php не установлен как модуль Apache, то сервер испытывает проблемы с приемом If-Modified-Since. Для исправления, предлагается в файл .htaccess поместить код:
Код:
RewriteEngine On
RewriteRule .* — [E=HTTP_IF_MODIFIED_SINCE:%{HTTP:If-Modified-Since}]
RewriteRule .* — [E=HTTP_IF_NONE_MATCH:%{HTTP:If-None-Match}]
для seo модов добавляющих к форумным страницам расширение .html, сделать по ниже приведенному образцу:
Код:
# url rewriting
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA]

# If-Modified-Since (if php is not installed as cgi then comment lines below)
RewriteRule .* — [E=HTTP_IF_MODIFIED_SINCE:%{HTTP:If-Modified-Since}]
RewriteRule .* — [E=HTTP_IF_NONE_MATCH:%{HTTP:If-None-Match}]
Источник: controlstyle.r.....since-php/
ВверхНа форуме нет Профиль
vlad77 Пол:Муж.

Модератор


Зарегистрирован: 15.03.2008
Показать/Спрятать

Версия 2.0.3

При создании новой темы, странице присваивалось нулевое время создания/изменения. В архив добавлена инструкция для случаев, если php не установлен как модуль Apache.

Инструкция по обновлению находится в архиве.


Скачать seo_mod_http_header.zip (15.31 KB). Добавлен/обновлён Чт 23 Ноя, 2017 21:32. Скачано 3 раз(а).
Version: 2.0.3HTTP заголовки Last-Modified и If-Modified-SinceHTTP headers Last-Modified and If-Modified-Since

ВверхНа форуме нет Профиль
Показать сообщения:   

Общий рейтинг темы Отдача заголовков Last-Modified и 304 Not Modified
Средний рейтинг: 2.00 :: Мин. рейтинг: 2 :: Макс. рейтинг: 2 :: Количество оценок: 1
Выберите вашу оценку: 1   2   3   4   5  






Часовой пояс: UTC + 3 часа
Просматривают тему:
Зарегистрированные пользователи: Нет

Перейти:   
Версия для печати
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы можете скачивать файлы
/a
Имя:

Пароль:

Запомнить
  Яндекс.Метрика
CrackerTracker © 2004 - 2017 CBACK.de