Назад | Перейти на главную страницу

Apache без кеширования определенных файлов

У меня есть приложение со следующим правилом перезаписи:

    RewriteCond /tmp/maintenance.html -f
    RewriteCond %{HTTP_HOST} !^backdoor.myapp.com$
    RewriteRule ^(.*)$ /tmp/maintenance.html [L] 

Это наш «режим обслуживания». поэтому я включаю обслуживание, связывая /tmp/main maintenance.html с реальным файлом (и сохраняю доступ к бэкдору, используя backdoor.myapp.com).

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

Мне интересно, как я могу установить заголовки для этого конкретного файла только в Apache2. Я считаю, что есть no-cache заголовок? Я предполагаю, что хочу установить этот заголовок для этого файла, и все должно быть хорошо.

Может ли кто-нибудь указать мне, как это сделать, или объяснить механизм, с помощью которого этот статический файл никогда не должен кэшироваться в браузере пользователя?

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

Также убедитесь, что mod_headers и mod_rewrite загружены на сервер. Если вы не уверены, поместите директивы заголовка в раздел «ifModule»:

<FilesMatch "^(excludeme-1|excludeme-2)\.jar$">
    FileEtag None
    <ifModule mod_headers.c>
        Header Unset ETag
        Header Set Cache-Control "max-age=0, no-store, no-cache, must-revalidate"
        Header Set Pragma "no-cache"
        Header Set Expires "Thu, 1 Jan 1970 00:00:00 GMT"
    </ifModule>
</FilesMatch>
<Directory /some/real/path/to/tmp>
  Header Set Pragma "no-cache"
  Header Set Expires "Thu, 1 Jan 1970 00:00:00 GMT"
  Header Set Cache-Control "max-age=0, no-store, no-cache, must-revalidate"
  Header Unset ETag
  FileETag None
</Directory>

Это должно сделать это практически для каждого браузера.