Apache no-cache для определенных файлов

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

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

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

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

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

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

2 ответа

Решение
<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>

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

Чтобы лучше контролировать гранулярность файлов, исключаемых из кэширования, вы можете использовать директиву 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>
Другие вопросы по тегам