Основы кэширования WordPress через .htaccess

23 December 2020

Начнем с того что такое вообще кэширование.

Думаю вы замечали, что при втором и последующих посещениях сайта страницы грузится всегда быстрее, чем при первом посещении. Все дело в кэшировании вашим браузером файлов сайта. Браузер запомнит все что вы ему скажете, к примеру файлы, стили, картинки, логотипы и т.д.. Все что не меняется неделями или даже месяцами.

Само кэширование на WordPress можно сделать и плагинами, но они в свою очередь сами могут незначительно тормозить сайт, из-за этого, всегда лучше все прописывать напрямую в коде, а в случае с кэшированием в файле .htaccess

Главное помнить, что все что в файле .htaccess между директивами «BEGIN WordPress» и «END WordPress», создано автоматически WordPress, и может быть перезаписано. Поэтому вставляйте любой код ниже «END WordPress».

Как проверить текущую степень кэширование сайта

Переходим на сайт www.webpagetest.org, забиваем адрес, нажимаем «Start test»

Не буду вдаваться в нюансы, так как эта статья об основах кэширования. Вам нужно обращать внимание на скорость первой, второй и третьей загрузки вашего сайта сервисом.

Если вы еще ничего не делали, а время загрузки с каждым разом улучшается, значит часть настроек кэширования сделал ваш хостинг. Собственно пока для отслеживания прогресса этого достаточно.

Будьте осторожны

Редактировать .htaccess нужно только через хостинг или FTP, не исключен конфликт некоторого кода с настройками хостинга. При редактировании .htaccess через админку WP, в случае сбоя вы не сможете удалить код оперативно и ваш сайт перестанет работать до момента, пока вы не удалите файлы через хостинг или FTP.

Включаем кэширование в браузере на стороне пользователя

mod_headers.c достаточно распространенный код кэширования. Он содержит оптимальные значения, но их всегда можно изменить, значения пишутся в секундах.

# Включaeм кэш в бpayзepaх пoceтитeлeй
<ifModule mod_headers.c>
# Вce html и htm фaйлы бyдyт хpaнитьcя в кэшe бpayзepa oдин дeнь
<FilesMatch "\.(html|htm)$">
Header set Cache-Control "max-age=43200"
</FilesMatch>
# Вce css, javascript и тeкcтoвыe фaйлы бyдyт хpaнитьcя в кэшe бpayзepa oднy нeдeлю
<FilesMatch "\.(js|css|txt)$">
Header set Cache-Control "max-age=604800"
</FilesMatch>
# Вce флэш фaйлы и изoбpaжeния бyдyт хpaнитьcя в кэшe бpayзepa oдин мecяц
<FilesMatch "\.(flv|swf|ico|gif|jpg|jpeg|png)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch>
# Oтключaeм кeшиpoвaниe php и дpyгих cлyжeбных фaйлoв
<FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
Header unset Cache-Control
</FilesMatch>
</IfModule>

mod_expires.c не менее популярен, может содержать следующие значения (years, months, weeks, days, hours, minutes, seconds).

<ifModule mod_expires.c>
ExpiresActive On
#кэшировать флэш и изображения на одну неделю
ExpiresByType image/x-icon "access plus 7 days"
ExpiresByType image/jpeg "access plus 7 days"
ExpiresByType image/png "access plus 7 days"
ExpiresByType image/gif "access plus 7 days"
ExpiresByType application/x-shockwave-flash "access plus 7 days"
#кэшировать css, javascript и текстовые файлы на одну неделю
ExpiresByType text/css "access plus 7 days"
ExpiresByType text/javascript "access plus 7 days"
ExpiresByType application/javascript "access plus 7 days"
ExpiresByType application/x-javascript "access plus 7 days"
#кэшировать html и htm файлы на один день
ExpiresByType text/html "access plus 1 day"
#кэшировать xml файлы на десять минут
ExpiresByType application/xhtml+xml "access plus 10 minutes"
</ifModule>

mod_headers.c и mod_expires.c могут использоваться одновременно и не будут мешать друг другу, если нет конфликта с хостингом.

Gzip сжатие

Gzip сжатие теряет актуальность с появлением AMP и Турбо страниц, но все еще полезно если на вашем сайте по каким-то причинам не настроить AMP и Турбо страницы.

<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_include mime ^text/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_include handler ^cgi-script$
</ifModule>

Оригинал стать на сайте g48.red/osnovy-keshirovaniya-wordpress-cherez-htaccess/