Настройки кеширования статики в htaccess

Кеширования статических файлов на клиенте позволяется ускорить повторную загрузку сайта, за счет того что клиент загрузит файл всего один раз и при повторном обращении к файлу он будет получен из кеша браузера. Для решения этой задачи можете воспользоваться модулем headers веб-сервера Apache, который позволяет контролировать и изменять заголовки HTTP-запросов и HTTP-ответов.

Apache

Для управления кешированием статических файлов, необходимо воспользоваться директивами ниже, добавив их в файл .htaccess в корне сайта.

Кеширование определенных типов файлов

Использование FilesMatch

Настройки кеширование возможно настроить по расширению файла (FilesMatch), к примеру

<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf)$">
    Header set Cache-Control "max-age=2592000"
</FilesMatch>

Для файлов с указанными расширениями в конструкции FilesMatch устанавливается отдаваемый сервером заголовок Cache-Control и переменная max-age, в которой указывается время сохранения файлов в кеше в секундах.

Использование mod_expires

Модуль контролирует установку HTTP-заголовков для кэширования данных на стороне браузера. Продолжительность хранения данных в кэше может быть установлена по времени, по последнему изменению файла или по времени доступа клиента.

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 1 month"
    ExpiresByType image/gif "access plus 2 months"
    ExpiresByType image/jpeg "access plus 2 months"
</IfModule>

Комбинация mod_expires и FilesMatch, для установки кеширования всех файлов из списка, на 1 месяц с момента обращения

<IfModule mod_expires.c>
    <FilesMatch ".(ico|gif|jpg|jpeg|png|swf|css|js|html|htm|xml|txt)$">
        ExpiresActive On
        ExpiresDefault "access plus 1 month"
    </FilesMatch>
</IfModule>

Либо с использованием mime типов. Часть файлов кешируется на 1 месяц (которые могут изменяться), остальные файлы кешируются на один год.

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType text/css "access 1 month"
    ExpiresByType text/html "access 1 month"
    ExpiresByType image/gif "access 1 year"
    ExpiresByType image/png "access 1 year"
    ExpiresByType image/jpg "access 1 year"
    ExpiresByType image/jpeg "access 1 year"
    ExpiresByType image/x-icon "access 1 year"
    ExpiresByType application/pdf "access 1 month"
    ExpiresByType application/javascript "access 1 month"
    ExpiresByType text/x-javascript "access 1 month"
    ExpiresByType application/x-shockwave-flash "access 1 month"
    ExpiresDefault "access 1 month"
</IfModule>

При этом по умолчанию, для всех не определенных типов, кеширование устаналивается на 1 месяц.

Для кеширования с момента измененя файла, а не момента доступа, используем следующую кострукцию

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType image/gif "modification plus 5 hours 3 minutes"
</IfModule>

Исключение файлов из кеша

Если по какой-то причине нет необходимости кешировать файлы, к примеру динамически скрипты, то исключить их из кеширования можно конструкцией ниже.

<FilesMatch ".(pl|php|cgi|spl|scgi|fcgi)$">
Header unset Cache-Control
</FilesMatch>

Для файлов с указанным расширением, заголовок кеширования (Cache-Control) будет удален.

Добавить комментарий