Кеширование картинок и стилей через .htaccess: mod_expires
2 мин чтения
Год назад я включал сжатие через mod_deflate. Второй шаг, чтобы сайт открывался быстрее: сказать браузеру, что картинки, стили и скрипты можно не качать заново при каждом заходе. Для этого в Apache есть mod_expires.
Правила
В .htaccess в корне сайта:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType text/css "access plus 1 week"
ExpiresByType application/javascript "access plus 1 week"
ExpiresByType application/x-javascript "access plus 1 week"
</IfModule>
Картинки браузер хранит месяц, стили и скрипты неделю. HTML-страницы сюда не пишем: их кешировать нельзя, иначе читатели не увидят новые записи и комментарии.
Подвох со стилями
Поправил стили, а у постоянных читателей сайт неделю выглядит по-старому: браузер не спрашивает сервер, у него есть копия. Лечится добавкой к адресу файла. В шаблоне вместо style.css пишем style.css?v=2 и при каждой правке меняем число. Для браузера это новый адрес, и он скачает файл заново.
WordPress для стилей и скриптов, подключенных через wp_enqueue_style и wp_enqueue_script, сам дописывает номер версии.
Проверка
curl -I http://example.com/wp-content/themes/моя_тема/style.css
В ответе должны быть заголовки Expires и Cache-Control: max-age=.... Нет их, значит модуль на хостинге не включен, и пишем в поддержку, как и с mod_deflate.
На блоге при повторном заходе страница грузится заметно быстрее: из сети приходит только сам HTML.