Примечание
Кто-то предположил, что это дубликат Как обслуживать предварительно сжатые файлы gzip / brotli с .htaccess . Этот вопрос предназначен только для обслуживания предварительно сжатых файлов. Этот вопрос другой. Пожалуйста, смотрите ниже.
Моя цель
Я хочу обслуживать предварительно сжатые файлы brotli, когда они существуют. Если предварительно не сжатый файл brotli не существует, вернитесь к на лету gzip-сжатию.
Текущий код
Я работаю на сайте, который ужеgzip «на лету» включен из файла .htaccess
следующим образом:
<ifmodule mod_deflate.c>
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml...
</ifmodule>
Модифицированный код
Я установил скрипт сборки, который сжимает многие статические ресурсы с помощью brotli. Чтобы их обслуживать, я заменил вышеуказанный блок mod_deflate
на следующий:
<IfModule mod_headers.c>
# Serve brotli compressed CSS and JS files if they exist
# and the client accepts brotli.
RewriteCond "%{HTTP:Accept-encoding}" "br"
RewriteCond "%{REQUEST_FILENAME}\.br" "-s"
RewriteRule "^(.*)\.(js|css)" "$1\.$2\.br" [QSA]
# Serve correct content types, and prevent double compression.
RewriteRule "\.css\.br$" "-" [T=text/css,E=no-brotli:1]
RewriteRule "\.js\.br$" "-" [T=text/javascript,E=no-brotli:1]
<FilesMatch "(\.js\.br|\.css\.br)$">
# Serve correct encoding type.
Header append Content-Encoding br
# Force proxies to cache brotli &
# non-brotli css/js files separately.
Header append Vary Accept-Encoding
</FilesMatch>
</IfModule>
Проблема
Служит для файлов в кодировке броутли, когда они существуют, как и ожидалось. Однако проблема, с которой я сейчас сталкиваюсь, заключается в том, что, поскольку оставшиеся ресурсы не кодируются на уровне brotli во время сборки, они теперь обслуживаются без сжатия.
Мне не удалось выяснить, как я могу обслуживать brotliс резервной версией gzip, которая не требует предварительного сжатия для вывода gzip.
Любая помощь приветствуется, спасибо!