Всем привет, столкнулся с такой задачей: нужно на сайте (Drupal) отдавать заголовки Last-Modified If-Modified-Since
Нашел решение в интернете:
<?php
$LastModified_unix = strtotime(date("D, d M Y H:i:s", filectime($_SERVER['SCRIPT_FILENAME'])));
$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');
}
else{
header('Last-Modified:' . $LastModified);
}
?>
Этот код вписал в файл includes/bootstrap.inc в функцию drupal_page_header
При проверке заголовков ответа сервера - Last-Modified не выдается
Хотя если написать header('X-Last-Modified:' . $LastModified); то все хорошо отдается.
Пришел к выводу что где-то обрубается вывод заголовка Last-Modified
Проверял не обрубается ли в htaccess - там нет.
Может кто сталкивался с проблемой?
Комментарии
Почему именно туда?
Это я нашел в интернете решение такое. А куда нужно? Там есть 2 функции drupal_page_header получается эти заголовки идут при первом построении страницы и вторая функция drupal_serve_page_from_cache - это когда страница из кеша берется.
Я что-то не так сделал? Подскажите?
хакая ядро и контриб вы рискуете столкнуться с проблемами в дальнейшем.
делайте так, когда четко отдаете себе отчет в том что делаете))
иначе:
все что вы пишите сами - оформляйте в своем модуле или теме.
если хотите изменить поведение ядра или какого-то контриб модуля - переопределяйте в своем модуле или теме.
если у вас затруднения - опишите подробно своими словами изначальную задачу,
и свое видение решения (если есть).
даю наводочку: вам нужно думать о том когда обновился кеш страницы, а не когда изменяли файлы с исходным кодом.
ответ на незаданный вопрос: потому что приветствуется поисковая оптимизация но не сеорастия)))
Изначальный вопрос - почему сайт не отдает заголовок Last-Modified
сенкс, но читать я умею))
в правильно заданном вопросе есть часть ответа.
просто нужно объяснить своими словами - зачем? какова конечная цель?
Конечная цель - именно отдать заголовок. Постановщик задачи - сео-специалист, причем не с моей компании. Остальное мне знать не надо. Мне нужно техническую часть вопроса решить.
А в целом Last-Modified как бы решает вопросы с СЕО (поисковик не будет каждый переиндексировать страницу), плюс с нагрузкой - если страница один раз сохранена - значит будет браться из кеша (второе тут можно опустить пока что).
В описании той функции, что вы раздраконили, написано чёрным по-белому, что она отдаёт эти заголовки только анониму. А вы небось под админом смотрите, да ещё и в настройках производительности сайта кэширование не включено.
я больше скажу, это работает по умолчанию из коробки...
но наверно тольк до тех пор, пока за дело не возьмуться специалисты))))
Не то, чтобы раздраконил - вернул как было. Смотрю не под админом - под анонимом, несколько сервисов по проверке ответа сервера. На момент принятия мною сайта - заголовков уже не было. Ну ок, всем спасибо.
Отвечаю на свой вопрос
На сайте используется Apache в связке nginx - именно nginx обрубал заголовок LastMiodified
Прописал в настройках принудительную отдачу
ssi_last_modified on;
add_header Last-Modified $date_gmt;
Все заработало как надо
add_header Last-Modified $date_gmt;
дат последней модификации страницы- текущая дата в gmt
какой в этом смысл?
Это пример, главное заголовок отдается.
Хотя бы доку бы почитали. http://nginx.org/ru/docs/http/ngx_http_ssi_module.html#ssi_last_modified
Там чёрным по белому написано, что установив значение в on заголовок Last Modified перестаёт обрезаться (этим модулем).
Принудительно выставлять его на текущее время - бред даже для примера.
Пример чего?
Значение Last-Modified не важно?
Важно то, что уже работает. Бред или не бред это уже решится потом. Дискуссия окончена. Всем спасибо.
с вами никто не дискутировал.