Как правильно настроить Last-modify

Автор kdvbpspr, 14 апреля 2021, 10:27:01

« назад - далее »

kdvbpspr

#15
Решил ход конём сделать :)
кэш smarty не использую.
У меня установлен модуль Express Cache 3,
для него в таблице ps_express_cache есть поля с датой последнего обновления `last_updated` для определённого урла `page_url`.
Укажу эту дату здесь
<?php
$LastModified_unix
= strtotime(date("D, d M Y H:i:s", 'Дата из таблицы ps_express_cache для определённого урла ')));
$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);
?>



Переопределяем displayHeader в FrontController.
либо здесь Dispatcher.php

Что скажете?
в этом случае настройки nginx для настройки Last-modify трогать не нужно

PrestaMan

Проверку проходит?
Если да, то нормально.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!

Adik

Хорошее решение. Но только если установлен модуль Express Cache 3.

elementaryweb

С позволения автора, апну топик, что б не создавать новый.

Как правильно настроить ответ 304 Not Modified?
Last-modify уже заработал, а вот 304 никак не настрою.
https://i.imgur.com/aQbLKNj.png

mistral

В Dispatcher.php внесите измения как написано выше.
В последних версиях prestashop это уже есть.

coder

При чем тут prestashop?
Настраивают со стороны сервера.
У вас apache или ngnix?

elementaryweb

apache
а файлы отдает ngnix
Было бы со стороны сервера - не спрашивал бы.

mistral

У вас какая версия prestashop?
В 1.7.... все есть. Смотрите файл smarty_internal_runtime_cachemodify.php
if ($_isCached && $cached->timestamp <= strtotime($_last_modified_date)) {
    ....
    header('Status: 304 Not Modified');

Кеширование у вас включено?
И где вы проверяли ответ? Меняли дату для If-Modified-Since?

elementaryweb

Цитата: mistral от 01 октября 2022, 11:54:30
У вас какая версия prestashop?
В 1.7.... все есть. Смотрите файл smarty_internal_runtime_cachemodify.php
if ($_isCached && $cached->timestamp <= strtotime($_last_modified_date)) {
    ....
    header('Status: 304 Not Modified');

Кеширование у вас включено?
И где вы проверяли ответ? Меняли дату для If-Modified-Since?
1.7.8.3
Кеширование включено
Проверял на сервисе https://last-modified.com/ru/last-modified-header

mistral

Проверять нужно в панели Яндекс.Вебмастера, там есть инструмент «Проверка ответа сервера».
В last-modified.com нет возможности менять дату для If-Modified-Since.