В чате Joomla коллеги поделились полезными правилами для .htaccess, которые позволяют включить серверное сжатие brotli для трафика, а так же настроить кэширование. Сохраняю к себе.
Правила следует вставить в самый конец .htaccess, после правил Joomla. В стандартном .htaccess Joomla вставлены правила, которые проверяют есть ли созданные вручную сжатые gzip файлы для js и css файлов.
- Секция GZIP & BROTLI с использованием mod_rewrite проверяет, существует ли уже сжатый .gz файл (например, style.css.gz) и поддерживает ли клиент сжатие
gzip. - Если условия выполнены, сервер отдает готовый
.gzфайл. - Важно: Для этих
.gzфайлов устанавливаются переменныеE=no-gzip:1иE=no-brotli:1. Это указывает другим модулям (включая mod_deflate и mod_brotli) не сжимать этот контент снова, предотвращая двойное сжатие и потенциальные ошибки (ERR_CONTENT_DECODING_FAILED).
Как это работает вместе со сжатием Brotli?
- Сначала Apache обрабатывает правила mod_rewrite из секции GZIP & BROTLI. Если запрошенный файл (.css или .js) имеет соответствующий .gz аналог, и клиент поддерживает gzip, Apache отдает этот готовый .gz файл и устанавливает флаги no-gzip и no-brotli.
- Если готовый .gz файл не найден или клиент не поддерживает gzip, Apache переходит к следующему этапу.
- Затем Apache проверяет, доступны ли mod_brotli или mod_deflate. В зависимости от доступности модуля и заголовков Accept-Encoding клиента (br, gzip), один из них выполнит сжатие файла на лету перед отправкой.
Включить сжатие Brotli на сервере для Joomla
<ifModule mod_brotli.c>
AddType image/svg+xml .svg
AddOutputFilterByType BROTLI_COMPRESS text/html text/plain text/xml text/css application/xml text/javascript application/x-javascript application/javascript application/json application/font-woff2 application/font-woff application/x-font-ttf application/vnd.ms-fontobject image/x-icon image/svg+xml
</ifModule>
<ifModule mod_deflate.c>
AddType image/svg+xml .svg
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/xml text/javascript application/x-javascript application/javascript application/json application/font-woff2 application/font-woff application/x-font-ttf application/vnd.ms-fontobject image/x-icon image/svg+xml
</ifModule>
Настройки кэширования для .htaccess Joomla
AddType application/vnd.ms-fontobject .eot
AddType application/x-font-opentype .otf
AddType image/svg+xml .svg
AddType application/x-font-ttf .ttf
AddType application/font-woff .woff
AddType application/font-woff2 .woff2
<IfModule mod_headers.c>
<FilesMatch ".(eot|otf|svg|ttf|woff2?)$">
Header set Access-Control-Allow-Origin "*"
</FilesMatch>
</IfModule>
AddOutputFilterByType DEFLATE text/plain text/html text/xml text/css application/xml application/xhtml+xml application/rss+xml application/javascript application/x-javascript
ExpiresActive on
ExpiresDefault "access plus 1 month"
ExpiresByType text/cache-manifest "access plus 0 seconds"
<FilesMatch \.(html|xhtml|xml|shtml|phtml|php|txt)$>
ExpiresDefault "access plus 0 seconds"
</FilesMatch>
ExpiresByType text/html "access plus 0 seconds"
ExpiresByType text/xml "access plus 0 seconds"
ExpiresByType application/xml "access plus 0 seconds"
ExpiresByType application/json "access plus 0 seconds"
ExpiresByType application/rss+xml "access plus 1 hour"
ExpiresByType application/atom+xml "access plus 1 hour"
<FilesMatch \.(ico)$>
ExpiresDefault "access plus 1 week"
</FilesMatch>
ExpiresByType image/x-icon "access plus 1 week"
<FilesMatch \.(gif|png|jpg|jpeg|webp|ogg|mp4|mkv|flv|swf|wmv|asf|asx|wma|wax|wmx|wm)$>
ExpiresDefault "access plus 1 year"
</FilesMatch>
ExpiresByType image/gif "access plus 365 days"
ExpiresByType image/png "access plus 365 days"
ExpiresByType image/jpeg "access plus 365 days"
ExpiresByType video/ogg "access plus 365 days"
ExpiresByType audio/ogg "access plus 365 days"
ExpiresByType video/mp4 "access plus 2 month"
ExpiresByType video/webm "access plus 2 month"
ExpiresByType text/x-component "access plus 2 month"
<FilesMatch \.(eot|ttf|otf|svg|woff|woff2)$>
ExpiresDefault "access plus 1 year"
</FilesMatch>
ExpiresByType application/x-font-ttf "access plus 6 month"
ExpiresByType font/opentype "access plus 6 month"
ExpiresByType application/x-font-woff "access plus 6 month"
ExpiresByType application/x-font-woff2 "access plus 6 month"
ExpiresByType image/svg+xml "access plus 6 month"
ExpiresByType application/vnd.ms-fontobject "access plus 2 month"
<FilesMatch \.(css|js)$>
ExpiresDefault "access plus 1 year"
</FilesMatch>
ExpiresByType text/css "access plus 365 days"
ExpiresByType application/javascript "access plus 365 days"
<FilesMatch \.(swf|pdf|doc|rtf|xls|ppt)$>
ExpiresDefault "access plus 1 year"
</FilesMatch>
ExpiresByType application/x-shockwave-flash "access plus 1 year"
ExpiresByType application/pdf "access plus 1 year"
ExpiresByType application/msword "access plus 1 year"
ExpiresByType application/rtf "access plus 1 year"
ExpiresByType application/vnd.ms-excel "access plus 1 year"
ExpiresByType application/vnd.ms-powerpoint "access plus 1 year"