Настраиваем ответ last-modified - PHP

Как передать реальную дату изменения страницы в Last-Modified и обработать условный запрос в PHP.

Заголовок Last-Modified должен содержать дату реального изменения представления страницы. Вычислять «вчерашнее число» при каждом запросе неверно. В PHP заголовки отправляются до HTML и другого вывода, а не внутри блока head.

Пример для страницы, целиком зависящей от одного файла:

<?php
$modified = filemtime(__FILE__);
if ($modified !== false) {
    header(
        "Last-Modified: " . gmdate("D, d M Y H:i:s", $modified) . " GMT"
    );
    $since = $_SERVER["HTTP_IF_MODIFIED_SINCE"] ?? null;
    $sinceTime = $since === null ? false : strtotime($since);
    $method = $_SERVER["REQUEST_METHOD"] ?? "GET";
    if (in_array($method, ["GET", "HEAD"], true)
        && !isset($_SERVER["HTTP_IF_NONE_MATCH"])
        && $sinceTime !== false
        && $sinceTime <= time()
        && $modified <= $sinceTime) {
        http_response_code(304);
        exit;
    }
}

Если результат зависит от базы, шаблонов, пользователя или других файлов, используйте время изменения самого содержимого либо не отправляйте этот заголовок. При использовании ETag обработка If-None-Match имеет приоритет. Дата обновления статьи и HTTP Last-Modified решают разные задачи.

Документация: HTTP Last-Modified.

Все материалы раздела «SEO»Каталог инструментов