我想通过.htaccess
文件禁用已经在Apache服务器上压缩的某些媒体文件的gzip压缩。
原因:因为它写在例如jPlayer's site,对于媒体文件应该禁用gzip编码:“媒体文件已经被压缩,GZIP只会浪费服务器上的CPU。如果你使用GZIP媒体,Adobe Flash插件会遇到问题。如何在.htaccess文件中禁用某些媒体文件的Apache gzip压缩?
Content-Length
头设置不正确时,Gzip已启用
- 所以玩一个SoundManager2球员一些的MP3文件时,赛道的长度进度条不恰当地工作(也许这是他们在jPlayer的网站上讲到的问题)。
我可以测试是否提供了一个内容gzipped here。
我确实在服务器上启用了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,所以我已经有一个重写规则,这是这样的:
# 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次不同的尝试 - !也许有些人将不得不在亚太地区全局设置他的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压缩,但它是全球:
RewriteRule ^(.*)$ $1 [NS,E=no-gzip:1,E=dont-vary:1]
用于MP3文件的响应头时,不使用此重写规则:http://pastebin.com/AkUZ6m5Y
使用此RewriteRule时,mp3文件的响应标题:http://pastebin.com/b8j3NF6D
如果媒体文件在不同的文件夹,你可以把htaccess的与该文件夹中的工作线,并且不影响网站的其他部分。 – Gerben 2012-02-12 14:38:28
+1,这是一个可能的解决方案,但是我不确定我的媒体文件是否进入了某个目录,所以我想让它更“灵活”。 :) – Sk8erPeter 2012-02-12 14:48:07
@SkBerPeter - 你有一些使用[L]标志的mod_rewrite规则吗?在.htaccess文件中重写工作(与早期发生的.conf文件相反)是一个巨大的混乱,除此之外,它稍微改变了[L]的行为。 [L]不是退出,而是循环回到.htaccess的顶部,作为副作用,所有环境变量都被清除!也许这就是你设置“no-gzip”的原因,但是当它被引用时,它似乎不再设置。如果可用(2.3.9及更高版本),则[END]标志可能会更好。 – 2013-12-02 00:59:35