Как отключить сжатие gzip Apache для некоторых медиафайлов в файле .htaccess?
Я хотел бы отключить сжатие gzip для некоторых медиафайлов, которые уже сжаты на сервере Apache через файл .htaccess
.
Причина: как написано напр. jPlayer site, gzip-кодировка должна быть отключена для медиафайлов: "Медиа файлы уже сжаты, а GZIP будет просто расточительным CPU на вашем сервере. Плагин Adobe Flash будет испытывать проблемы, если вы GZIP-носители".
В настоящее время у меня проблема с тем, что заголовок Content-Length
неправильно установлен, когда включен gzip, поэтому при воспроизведении некоторых mp3 файлов с SoundManager2, индикатор выполнения трека не работает должным образом (возможно, проблема, о которой они рассказали на сайте jPlayer).
Я могу проверить, поддерживается ли контент gzipped здесь.
У меня есть модули mod_deflate
, mod_mime
и mod_rewrite
, включенные на сервере.
Согласно phpinfo(), вот список всех загруженных модулей:
core mod_log_config mod_logio itk http_core mod_so mod_alias mod_auth_basic mod_authn_file mod_authz_default mod_authz_groupfile mod_authz_host mod_authz_user mod_autoindex mod_cgi mod_dav mod_dav_svn mod_authz_svn mod_deflate mod_dir mod_env mod_mime mod_negotiation mod_php5 mod_reqtimeout mod_rewrite mod_setenvif mod_ssl mod_status
Я использую Drupal 6, поэтому у меня уже есть RewriteRule, который выглядит следующим образом:
# Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
Я уже пытался отключить gzip, но они не работали (есть 6 разных попыток!), возможно, некоторые из них должны быть установлены глобально в Apache httpd.conf?!):
-
# http://www.cyberciti.biz/tips/speed-up-apache-20-web-access-or-downloads-with-mod_deflate.html
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.avi$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.mov$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.mp3$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.mp4$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.rm$ no-gzip dont-vary
-
## Step 2. here: http://www.mydigitallife.info/how-to-enable-mod_deflate-gzip-compression-on-cpanel-web-hosts/
<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
RemoveOutputFilter mp3
# Don’t compress already-compressed files
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:avi|mov|mp3|mp4|rm|flv|swf|mp?g)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .pdf$ no-gzip dont-vary
</IfModule>
-
RemoveOutputFilter mp3
-
# for files that end with ".mp3"
<FilesMatch \.mp3$>
SetEnv no-gzip 1
</FilesMatch>
-
RewriteRule \.mp3$ - [NS,E=no-gzip:1,E=dont-vary:1]
-
RewriteRule ^((.*)\.mp3)$ $1.mp3 [NS,E=no-gzip:1,E=dont-vary:1]
Единственный, который работает правильно и отключает сжатие gzip, НО он глобальный:
Ответные заголовки для mp3 файла, когда НЕ используют этот RewriteRule: http://pastebin.com/AkUZ6m5Y
Ответные заголовки для mp3 файла при использовании этого RewriteRule: http://pastebin.com/b8j3NF6D
Ответы
Ответ 1
Мне пришлось отключить сжатие для файлов odp для использования внешним плагином
Просто добавлено следующее правило в файле .htaccess
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.odp$ no-gzip dont-vary
И сервер отключил сжатие для файлов odp
Обязательно очистите кеш браузера перед тестированием
Ответ 2
Разве вы не ошибетесь, используя директиву SetOutputFilter DEFLATE
, а затем попытаетесь отключить это для потока, который уже включает в себя некоторую форму compresstion? Не проще ли не использовать эту директиву, а затем сжать сжатый поток. Например.
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript application/javascript application/ecmascript application/rss+xml
</IfModule>
И, возможно, добавление заголовка Vary:
<IfModule mod_headers.c>
<FilesMatch "\.(js|css|xml|html)$">
Header append Vary Accept-Encoding
</FilesMatch>
</IfModule>
OK это может пропустить нечетный тип, о котором вы не думали, но он достигнет 99% от вашего потенциала сжатия.
Ответ 3
Я думаю, что вы не используете сжатие в своих медиа. Вы проверяли, что вы фактически делетируете файлы? Модуль может быть загружен в память, но это не означает, что он сжимает файлы. Если ваш .htaccess только переписал правила, возможно, вы не сжимаете какой-либо контент.
Ответ 4
это кажется устаревшим: https://www.varnish-cache.org/docs/3.0/tutorial/compression.html#gzip-and-esi
GZIP и ESI
Если вы используете Edge Side Includes, вы с радостью заметите, что ESI и GZIP работают вместе очень хорошо. Лак волшебным образом распаковывается содержимое для обработки ESI, а затем повторно скомпоновать его для эффективного хранения и доставки.
Ответ 5
Чтобы отключить сжатие gzip только на файлах Adobe Flash Player (SWF) на моем сервере Apache, я добавил это в мой .htaccess файл:
<IfModule mod_headers.c>
<FilesMatch "\.swf$">
RewriteRule ^(.*)$ $1 [NS,E=no-gzip:1,E=dont-vary:1]
</FilesMatch>
</IfModule>
Если вы захотите, вы можете отключить сжатие gzip для других типов файлов:
<IfModule mod_headers.c>
<FilesMatch "\.(js|css|swf)$">
RewriteRule ^(.*)$ $1 [NS,E=no-gzip:1,E=dont-vary:1]
</FilesMatch>
</IfModule>
Ответ 6
Я знаю, что эта ветка устарела, но я прошел один и тот же путь.
Две вещи, которые я сделал.
-
Я включил .htaccess и отключил gzip для папки.
<Files "*.gz.asc">
RemoveEncoding .gz
</Files>
-
установите правило reqwrite для отключения
RewriteRule "\.js\.gz$" "-" [T=text/javascript,E=no-gzip:1]
Обе из них работали для меня. Я предлагаю сначала перейти к документации Apache, прежде чем искать на форумах.
для получения дополнительной информации перейдите на сайт Apache.
https://httpd.apache.org/docs/2.4/mod/mod_deflate.html
https://httpd.apache.org/docs/2.4/mod/mod_mime.html#addtype