2012-02-12 94 views
14

我想通过.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_mimemod_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

+1

如果媒体文件在不同的文件夹,你可以把htaccess的与该文件夹中的工作线,并且不影响网站的其他部分。 – Gerben 2012-02-12 14:38:28

+0

+1,这是一个可能的解决方案,但是我不确定我的媒体文件是否进入了某个目录,所以我想让它更“灵活”。 :) – Sk8erPeter 2012-02-12 14:48:07

+0

@SkBerPeter - 你有一些使用[L]标志的mod_rewrite规则吗?在.htaccess文件中重写工作(与早期发生的.conf文件相反)是一个巨大的混乱,除此之外,它稍微改变了[L]的行为。 [L]不是退出,而是循环回到.htaccess的顶部,作为副作用,所有环境变量都被清除!也许这就是你设置“no-gzip”的原因,但是当它被引用时,它似乎不再设置。如果可用(2.3.9及更高版本),则[END]标志可能会更好。 – 2013-12-02 00:59:35

回答

0

我认为你没有在媒体中使用压缩。你有没有检查你实际上正在缩小文件?该模块可以加载到内存中,但这并不意味着它正在压缩文件。如果你的.htaccess只有重写规则,你可能不会压缩任何类型的内容。

+0

*“如果你的.htaccess只有重写规则,你可能不会压缩任何类型的内容。”*我在这里粘贴了RewriteRule Drupal使用并默认设置 - 但为什么这意味着如果服务器上启用gzip压缩,使用RewriteRule,我不压缩任何内容?这两者之间的联系并不清楚。使用mod_rewrite并不意味着压缩被禁用。但是最重​​要的是:在提出任何问题之前,我测试了压缩。正如我提到的,我可以在这里测试它:http://goo.gl/WCzQZ,它说是的。 – Sk8erPeter 2012-02-12 14:45:31

+0

+1看看他通过pastebin提供的标题。 – TerryE 2012-02-13 00:48:18

1

你是不是用错误的方法去使用指令SetOutputFilter DEFLATE,然后尝试禁用这个已经包含某种形式的压缩的流?是不是很容易不是使用此指令,然后压缩可压缩的流。例如。

<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> 

确定这可能会错过你没有想到的奇型,但将实现99 +%的压缩潜力。

+0

感谢您的回答!我试过了,有趣的是,当我将这里粘贴的FilesMatch部分添加到我的全局'.htaccess'文件中时,我得到一个“500内部服务器错误”......但是更糟糕的是,Content-Length头部是在播放mp3文件或访问任何其他页面时仍未设置,因为播放器服务媒体文件时效果不佳。如果我使用全局的'RewriteRule ^(。*)$ $ 1 [NS,E = no-gzip:1,E = dont-vary:1]'行,则Content-Length标题被设置并且每个玩家都能正常工作。但全球禁用gzip并不是一个好主意。 :( – Sk8erPeter 2012-02-12 15:23:28

+0

请看看我编辑的问题,我粘贴了一个MP3文件的响应头文件,当它与没有提及的工作RewriteRule(看看pastebin链接)播放时,谢谢! – Sk8erPeter 2012-02-12 15:33:56

+0

这些响应头正是我所期望的有和没有deflate在流上的工作你没有评论你是否注释了SetOutputFilter DEFLATE行,你需要为此工作。 – TerryE 2012-02-12 16:13:06

4

我不得不禁用ODP文件压缩外部插件 只使用添加了以下规则.htaccess文件

SetOutputFilter DEFLATE 
SetEnvIfNoCase Request_URI \.odp$ no-gzip dont-vary 

而对于ODP文件服务器禁用压缩 确保清除浏览器测试

0

要在我的Apache服务器上刚刚的Adobe Flash Player文件(主权财富基金)禁用gzip压缩,我已将此添加到我的.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> 
-1

我知道这个线程是旧的,但我走过了同样的道路。

我已经做了两件事。

  1. 我启用了.htaccess并且完全禁用了gzip文件夹。

    <Files "*.gz.asc"> 
        RemoveEncoding .gz 
    </Files> 
    
  2. 把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