#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>
.