Помогите настроить корректно Last Modified

Главные вкладки

Аватар пользователя dragondesign dragondesign 28 ноября 2023 в 21:07

Добрый день всем!

В общем проблема такая. Сервер отдает Last modified дату и время последнего сброса кеша... для всех страниц. Как корректно настроить, чтобы в заголовке отдавал реальную дату модификации?

И еще, как откорректировать такой ответ: expires: Sun, 19 Nov 1978 05:00:00 GMT

Drupal 9.5.11

Комментарии

Аватар пользователя marassa marassa 28 ноября 2023 в 21:58

dragondesign wrote: чтобы в заголовке отдавал реальную дату модификации?

Реальную дату модификации чего? Если страница содержит ноду, пару вьюх и футер, в котором позавчера поменялся телефон компании?

Аватар пользователя dragondesign dragondesign 29 ноября 2023 в 7:34

Ноды конечно, ведь это адрес ноды, все остальные объекты тут лишь вставные.
У меня сейчас на всех 15 тысячах страниц Last-modified кеша, это не правильно.

Аватар пользователя dragondesign dragondesign 9 декабря 2023 в 18:32

Увы... ничего из выше перечисленного не помогает. Более того модуля lastmodified_since больше нет. Вернее если покопаться можно скачать для D8 ...путем нехитрых манипуляций я его на D9 запустил. И он работает, но все, что он сделал, это стал отдавать 304 ...но сравнивает он все равно со временем кеша.
Как отдать дату и время последнего редактирования ноды в Last Modified, а не кеша...

Аватар пользователя kosskren kosskren 15 декабря 2023 в 17:03

На днях добавлял Last Modified для Drupal 8.7. Может поможет.

В своем модуле:

Файл: MY_MODULE.services.yml

 MY_MODULE.subscriber:
    class: Drupal\MY_MODULE\EventSubscriber\Subscriber
    arguments: ['@config.factory']
    tags:
      - { name: event_subscriber }

Файл: src/EventSubscriber/Subscriber.php

<?php
namespace Drupal\MY_MODULE\EventSubscriber;

use 

Symfony\Component\HttpKernel\KernelEvents;
use 
Symfony\Component\HttpKernel\Event\FilterResponseEvent;
use 
Symfony\Component\EventDispatcher\EventSubscriberInterface;

class 

Subscriber implements EventSubscriberInterface {

  

/**
   * Executes actions on the respose event.
   *
   * @param \Symfony\Component\HttpKernel\Event\FilterResponseEvent $event
   *   Filter Response Event object.
   */
  
public function onKernelResponse(FilterResponseEvent $event) {
    
$response $event->getResponse();

    

// надо посмотреть в объекте $response, через него можно получить ноду и нужную дату.

    // вместо time() будет нужная вам дата
    

$time time();
   
    
// Форматируем дату
    
$lastModifiedDate date('D, d M Y G:i:s'$time);

   

// Добавляем заголовок
    
$response->headers->set('Last-Modified'$lastModifiedDate ' GMT');
  }

  public static function 

getSubscribedEvents() {
    
// -10 это приоритет вызова, с ним можно поиграть при надобности
    
$events[KernelEvents::RESPONSE][] = ['onKernelResponse', -10];
    return 
$events;
  }

}

?>

Сорян, что код разъехался, чет не смог подправить)