Ошибочное кеширование целой страницы, даже для зарегестрированного пользователя
Проблемы:
- незарегистрированный пользователь не видит обновления на сайте
- зарегестрированный пользователь переходит на главную страницу и видит страницу для незарегистрированного пользователя
Отступление:
mod_expires - модуль Апача, позволяющий задавать заголовок Expire для отдаваемых сервером элементов(страниц, картинок, css) c определенным временным значением, до наступления которого браузер не должен делать запрос к серверу.
Из файла .htaccess Drupal6:
<IfModule mod_expires.c>
# Enable expirations.
ExpiresActive On
# Cache all files for 2 weeks after access (A).
ExpiresDefault A1209600
# Do not cache dynamically generated pages.
ExpiresByType text/html A1
</IfModule>
эти строки задают Expire 2недели для всех элементов, кроме тех что имеют МИМЕ-тип text/html.
Конец отступления.
Проблема у меня была в том что у меня на Server: Apache/1.3.34 (Debian) PHP/5.2.0-8+etch13
модуль mod_expire грузится раньше(прописан раньше в конфиге) чем модуль mod_php5 и поэтому он не имеет информации о MIME типе м поэтому Expire 2недели присвается странице также.
Решения:
1. Если есть доступ к конфигу, поставить загрузку модуля mod_expires после модуля mod_php5
2. Или в файле .htaccess сменить ExpiresActive On на ExpiresActive Off, либо закоментировать весь кусок относящийся к mod_expires, либо удалить
Оказывается есть более элегантное решение, незачем отказываться от кеширования, втавить этот блок: