Кэширование htaccess не работает - PullRequest
10 голосов
/ 15 декабря 2011

Я ввел следующее в мой файл .htacces, чтобы начать кэширование веб-контента. Согласно Google Page Speed ​​и Yslow, страницы все еще не кэшированы. Модули не так? Или приложения не показывают данные правильно?

Сайт работает на Apache 2.0 на сервере

.htaccess (часть с модулями кеширования):

# Expire headers
<ifModule mod_expires.c>
  ExpiresActive On
  ExpiresDefault "access plus 1 seconds"
  ExpiresByType image/x-icon "access plus 2592000 seconds"
  ExpiresByType image/jpeg "access plus 2592000 seconds"
  ExpiresByType image/png "access plus 2592000 seconds"
  ExpiresByType image/gif "access plus 2592000 seconds"
  ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
  ExpiresByType text/css "access plus 604800 seconds"
  ExpiresByType text/javascript "access plus 216000 seconds"
  ExpiresByType application/javascript "access plus 216000 seconds"
  ExpiresByType application/x-javascript "access plus 216000 seconds"
  ExpiresByType text/html "access plus 600 seconds"
  ExpiresByType application/xhtml+xml "access plus 600 seconds"
</ifModule>
 
# Cache-Control Headers
<ifModule mod_headers.c>
#month
  <filesMatch "\.(ico|jpe?g|png|gif|swf)$">
    Header set Cache-Control "max-age=2592000, public"
  </filesMatch>
#week
  <filesMatch "\.(css|js)$">
    Header set Cache-Control "max-age=604800, public"
  </filesMatch>
#day
  <filesMatch "\.(x?html?|php)$">
    Header set Cache-Control "max-age=43200, private, must-revalidate"
  </filesMatch>
</ifModule>
# END Cache-Control Headers
 
# Turn ETags Off
<ifModule mod_headers.c>
  Header unset ETag
</ifModule>
FileETag None
 
# Remove Last-Modified Header
<ifModule mod_headers.c>
  Header unset Last-Modified
</ifModule>

1 Ответ

20 голосов
/ 24 июля 2012

Зайдите в httpd.conf и найдите строку mod_expires, она не должна быть закомментирована. Найдите строку mod_headers и убедитесь, что она не закомментирована.

Или (не для критически важного приложения) есть простой и грязный тест: удалите <ifModule mod_expires.c> и </ifModule>, оставьте промежуточные данные, то же самое относится и к <ifModule mod_headers.c>, и если на вашем сервере произойдет сбой 500 500 Server Server Error, то ваш возможно, отсутствует один или оба этих модуля, и они не включены. Если это так, то зайдите в httpd.conf и включите то, что вам нужно.

Вы также можете проверить заголовки ответа вашего сайта с помощью инструмента, подобного REDbot . Просто выберите URL ресурса, например, указывающий на изображение, и вставьте его в инструмент, чтобы увидеть, какие заголовки отправляются обратно вместе с некоторыми рекомендациями. Обратите внимание, что он следует правилам домена robots.txt и не будет проверять ресурс, если он запрещен.

И, как сказал Гербен, использование сетевой вкладки в Firefox, инструментах Chrome Dev или каком-либо аналогичном инструменте веб-разработчика помогает увидеть, какие заголовки отправляются и принимаются.

Вам также не нужно устанавливать Cache-Control public. И вам не нужно использовать max age, если вы также используете ExpiresByType звонки.

Для получения дополнительной информации прочтите этот замечательный учебник: http://www.mnot.net/cache_docs/

И узнайте на примере: посмотрите, как это делается в html5-boilerplate в https://github.com/h5bp/html5-boilerplate/blob/master/dist/.htaccess

Другие популярные примеры конфигурации сервера, такие как lighthttpd, Node.js, Nginx и т. Д., См .: https://github.com/h5bp/server-configs

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...