файлы не кэшируются при возврате через RewriteRule — apache

#php #apache

#php #apache

Вопрос:

Я создал RewriteRule в .htaccess, чтобы возвращать файл, только если пользователь вошел в систему:

 RewriteRule ^(.*)$ ../authorize.php?file=$1 [NC]
  

authorize.php выглядит так:

 <?php
session_start();
if (!isset($_SESSION["user_id"]) || $_SESSION["user_sessid"] != session_id() || $_REQUEST["token"] != $_TOKEN) {
    header("HTTP/1.1 404 NOT FOUND");
} else {
    $file = "public/" . $_REQUEST['file'];
    $contentType = mime_content_type($file);
    header("Content-type: $contentType");
    header('Content-Disposition: inline;');
    readfile($file);

}
  

Вот заголовки из ответов одного из файлов:

 HTTP/1.1 200 OK
Date: Thu, 14 Mar 2019 14:51:54 GMT
Server: Apache/2.4.25 (Debian)
X-Powered-By: PHP/7.0.33
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: max-age=3153600000
Pragma: no-cache
Content-Disposition: inline;
Keep-Alive: timeout=5, max=98
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: image/jpeg
  

Проблема в том, что все файлы не кэшируются браузером после этих изменений. Есть идеи, что может быть не так?

Срок действия: Чт, 19 ноября 1981 г. 08:52:00 GMT это не проблема, если я изменю его на более позднюю дату, файлы останутся некэшированными.

Ответ №1:

Проблема была в Pragma: no-cache заголовке.
Решением было использовать session_cache_limiter('private') before session_start() и добавить заголовок Cache-Control: max-age=<age_in_seconds> .