В чате 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"

 

Толкачев Сергей Юрьевич
Толкачев Сергей Юрьевич

Joomla-разработчик. Контрибьютер ядра Joomla. Один из ведущих Telegram-канала русскоязычного Joomla-сообщества JoomlaFeed, один из модераторов чата русскоязычного Joomla-сообщества. Мои расширения в официальном маркетплейсе расширений Joomla - Joomla Extensions Directory. Имею публикации в официальном журнале международного Joomla-сообщества - Joomla Community Magazine.

Муж. Отец 3 детей.

Россия, Саратов.

Расширения Joomla WebTolk

96 Всего расширений
12 Категорий
492 Выпущено версий
560000 Всего скачиваний
Корзина
Корзина пуста