У меня есть приложение со следующим правилом перезаписи:
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>
Это должно сделать это практически для каждого браузера.