如何对.htaccess文件中的某些媒体文件禁用Apache gzip压缩?
我想通过如何对.htaccess文件中的某些媒体文件禁用Apache gzip压缩?,apache,.htaccess,drupal,mod-rewrite,apache2,Apache,.htaccess,Drupal,Mod Rewrite,Apache2,我想通过.htaccess文件禁用Apache服务器上已压缩的某些媒体文件的gzip压缩。 原因:如上面所述,媒体文件应禁用gzip编码:“媒体文件已被压缩,gzip将浪费服务器上的CPU。如果gzip媒体,Adobe Flash插件将遇到问题。” 我目前遇到的问题是,当gzip被启用时,内容长度标题没有正确设置-因此,当用播放器播放一些mp3文件时,曲目的长度进度条不能正常工作(因此可能这就是他们在jPlayer网站上提到的问题) 我可以测试一个内容是否被下载。 我确实在服务器上启用了mod_
.htaccess
文件禁用Apache服务器上已压缩的某些媒体文件的gzip压缩。原因:如上面所述,媒体文件应禁用gzip编码:“媒体文件已被压缩,gzip将浪费服务器上的CPU。如果gzip媒体,Adobe Flash插件将遇到问题。” 我目前遇到的问题是,当gzip被启用时,
内容长度
标题没有正确设置-因此,当用播放器播放一些mp3文件时,曲目的长度进度条不能正常工作(因此可能这就是他们在jPlayer网站上提到的问题)
我可以测试一个内容是否被下载。我确实在服务器上启用了
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种不同的尝试!-可能其中一些必须在Apache的httpd.conf中全局设置?!):
使用此重写规则时mp3文件的响应标题:我认为您的媒体中没有使用压缩。你有没有检查过你实际上是在压缩文件?该模块可以加载到内存中,但这并不意味着它正在压缩文件。如果您的.htaccess只有重写规则,那么您可能没有压缩任何类型的内容。您是否使用指令
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>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css应用程序/x-javascript应用程序/javascript应用程序/ecmascript应用程序/rss+xml
并可能添加一个不同的标题:
<IfModule mod_headers.c>
<FilesMatch "\.(js|css|xml|html)$">
Header append Vary Accept-Encoding
</FilesMatch>
</IfModule>
头附加变量接受编码
好的,这可能会错过您没有想到的奇怪类型,但它将实现99%以上的压缩潜力。我不得不禁用odp文件的压缩,以供外部插件使用 刚刚在.htaccess文件中添加了以下规则
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.odp$ no-gzip dont-vary
服务器禁用了odp文件的压缩
测试前请确保清除浏览器缓存这似乎过时了:
GZIP与ESI
如果您使用的是Edge Side Includes,您会很高兴地注意到ESI
和GZIP合作得非常好。清漆会神奇地减压
要进行ESI处理的内容,然后重新压缩以获得高效的
储存和交付
为了仅在Apache服务器上的Adobe Flash Player文件(SWF)上禁用gzip压缩,我在.htaccess文件中添加了以下内容:
<IfModule mod_headers.c>
<FilesMatch "\.swf$">
RewriteRule ^(.*)$ $1 [NS,E=no-gzip:1,E=dont-vary:1]
</FilesMatch>
</IfModule>
重写规则^(.*)$$1[NS,E=no gzip:1,E=notvary:1]
如果愿意,还可以对其他文件类型禁用gzip压缩:
<IfModule mod_headers.c>
<FilesMatch "\.(js|css|swf)$">
RewriteRule ^(.*)$ $1 [NS,E=no-gzip:1,E=dont-vary:1]
</FilesMatch>
</IfModule>
重写规则^(.*)$$1[NS,E=no gzip:1,E=notvary:1]
我知道这个线程很旧,但我也走了同样的路
我做了两件事
<Files "*.gz.asc">
RemoveEncoding .gz
</Files>
如果媒体文件位于不同的文件夹中,您可以将htaccess和工作行放在该文件夹中,并且不会影响网站的其他部分。+1,这是一个可能的解决方案,但不能绝对确定我的媒体文件是否进入某个目录,因此我希望使其更“灵活”。)@你有没有使用[L]标志的mod_重写规则?在.htaccess文件中进行重写(而在.conf文件中重写要早得多)是一个巨大的难题,其中之一就是稍微改变了[L]的操作。[L]没有退出,而是循环回到.htaccess的顶部,作为副作用,所有环境变量都被清除!也许这就是为什么您设置了“no gzip”,但当引用它时,它似乎不再被设置。如果可用(2.3.9及更高版本),也许[END]标志会更好。@skapter而不是笼统的“SetOutputFilter”语句,我使用“AddOutputFilterByType DEFLATE text/html text/css text/javascript应用程序/x-javascript应用程序/javascript应用程序/x-font-ttf应用程序/vnd.ms-fontobject image/svg+xml”打开压缩…按mime类型而不是按扩展几乎是一样的,因为通常有1:1的映射。因为mime类型的音频文件从一开始就不会打开它,所以没有必要再关闭它。(还请注意,对于已经压缩的文件,如果它弊大于利,则不启用该选项。)知道我可以在全局httpd.conf中对所有文件禁用压缩吗?“如果您的.htaccess仅具有重写规则,则您可能没有压缩任何类型的内容。”我在这里粘贴了Drupal正在使用且默认设置的RewriteRule——但为什么这意味着如果服务器上启用了gzip压缩,使用RewriteRule,我就不会压缩任何内容?我不清楚这两件事之间的联系。使用mod_rewrite并不意味着压缩被禁用。但是什么
RewriteRule ^(.*)$ $1 [NS,E=no-gzip:1,E=dont-vary:1]
<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>
<IfModule mod_headers.c>
<FilesMatch "\.(js|css|xml|html)$">
Header append Vary Accept-Encoding
</FilesMatch>
</IfModule>
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.odp$ no-gzip dont-vary
<IfModule mod_headers.c>
<FilesMatch "\.swf$">
RewriteRule ^(.*)$ $1 [NS,E=no-gzip:1,E=dont-vary:1]
</FilesMatch>
</IfModule>
<IfModule mod_headers.c>
<FilesMatch "\.(js|css|swf)$">
RewriteRule ^(.*)$ $1 [NS,E=no-gzip:1,E=dont-vary:1]
</FilesMatch>
</IfModule>
<Files "*.gz.asc">
RemoveEncoding .gz
</Files>
RewriteRule "\.js\.gz$" "-" [T=text/javascript,E=no-gzip:1]