Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何对.htaccess文件中的某些媒体文件禁用Apache gzip压缩?_Apache_.htaccess_Drupal_Mod Rewrite_Apache2 - Fatal编程技术网

如何对.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中全局设置?!):

唯一可以正常工作并禁用gzip压缩,但它是全局的:

不使用此重写规则时mp3文件的响应标题:

使用此重写规则时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]

我知道这个线程很旧,但我也走了同样的路

我做了两件事

  • 我为一个文件夹完全启用了.htaccess并禁用了gzip

    <Files "*.gz.asc">
         RemoveEncoding .gz
     </Files>
    
  • 这两种方法对我都有效,我建议在论坛上搜索之前,先阅读Apache文档

    有关更多信息,请访问Apache网站


    如果媒体文件位于不同的文件夹中,您可以将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]