提问人:dock21 提问时间:3/27/2021 最后编辑:MrWhitedock21 更新时间:3/29/2021 访问量:1609
如何在htaccess中禁用文件夹的gzip压缩
How to disable gzip compression in htaccess for a folder
问:
我正在寻找禁用文件夹 xxx 的 gzip 文件夹。在 StackOverflow 中查找,我尝试过这个:
SetEnvIf Request_URI ^/xxx(.*) no-gzip dont-vary
但它不起作用。
我在这里补充了:
<IfModule mod_deflate.c>
SetEnvIf Request_URI ^/flipbook(.*) no-gzip dont-vary
# enables the filter
SetOutputFilter DEFLATE
# non-textual entities should be already compressed
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
</IfModule>
甚至在mod_deflate模块之外,但没有任何效果。
谁能帮忙?
答:
SetEnvIf Request_URI ^/flipbook(.*) no-gzip dont-vary
这看起来应该有效 - 对于任何开头的 URL(区分大小写)。设置环境变量将禁用 mod_deflate 的 DEFLATE 过滤器。/flipbook
no-gzip
但是,正则表达式上的部分完全是多余的。而且,除非您在自己的指令中专门使用 env var,否则这不会做任何事情。我不认为是一个“特殊”的 Apache env var。Apache 有 ,它做了可能打算做的事情,但是,我认为您无论如何都不应该禁用标头,因为mod_deflate根据客户端发送的 HTTP 请求标头应用过滤器,因此任何中间缓存代理都应该基于此标头进行缓存。(只有某些代理的标头有问题。(.*)
dont-vary
dont-vary
force-no-vary
dont-vary
Vary
Accept-Encoding
所以,这应该写成:
SetEnvIf Request_URI "^/flipbook" no-gzip
参考:
# enables the filter SetOutputFilter DEFLATE
这不仅“启用过滤器”,还对所有响应启用 DEFLATE 过滤器。这基本上使后面的指令变得多余,因为您已经在所有内容上设置了 DEFLATE。通常,您不希望在所有内容上都设置它,这大概就是您使用指令的原因。AddOutputFilterByType
AddOutputFilterByType
因此,如果您在特定的 mime 类型上设置 DEFLATE,您可能不需要该指令。或者,您使用并删除这些指令,但您仍应使用 env var 在图像和其他已压缩的媒体上禁用过滤器。SetOutputFilter
SetOutputFilter
AddOutputFilterByType
no-gzip
AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-javascript
您不需要全部 3 个。您的服务器在发送 JavaScript 文件时只设置了一个 mime 类型 - 您可以在 HTTP 响应中看到。你只需要那个。(可能。application/javascript
替代解决方案
与其将 env var 设置为禁用 mod_default,不如使用 Apache 表达式仅在不访问以 开头的 URL 时有条件地设置输出过滤器。no-gzip
<If>
/flipbook
例如:
<If "%{REQUEST_URI} !~ m#^/flipbook/#">
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/javascript
</If>
除非您打算将相同的代码移植到可能未启用mod_deflate的多个服务器,否则您实际上并不需要包装器(这是可以接受的)。<IfModule>
评论