Блог пользователя - bismigalis

Ошибочное кеширование целой страницы, даже для зарегестрированного пользователя

14 января 2009 в 23:22

Проблемы:
- незарегистрированный пользователь не видит обновления на сайте
- зарегестрированный пользователь переходит на главную страницу и видит страницу для незарегистрированного пользователя

Отступление:
mod_expires - модуль Апача, позволяющий задавать заголовок Expire для отдаваемых сервером элементов(страниц, картинок, css) c определенным временным значением, до наступления которого браузер не должен делать запрос к серверу.

Из файла .htaccess Drupal6:

# Requires mod_expires to be enabled.
<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, либо удалить

Оказывается есть более элегантное решение, незачем отказываться от кеширования, втавить этот блок: