微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 htaccess 中禁用文件夹的 gzip 压缩 替代解决方案

如何解决如何在 htaccess 中禁用文件夹的 gzip 压缩 替代解决方案

我希望禁用文件夹 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

这看起来应该可以工作 - 对于任何以 /flipbook 开头(区分大小写)的 URL。设置 no-gzip 环境变量会禁用 mod_deflate 的 DEFLATE 过滤器。

然而,正则表达式中的 (.*) 部分完全是多余的。而且,除非您在自己的指令中专门使用 dont-vary env var,否则这不会做任何事情。我不认为 dont-vary 是一个“特殊”的 Apache 环境变量。 Apache 有 force-no-vary,它执行 dont-vary 可能打算做的事情,但是,我认为您无论如何都不应该禁用 Vary 标头,因为 mod_deflate 基于 { {1}} 从客户端发送的 HTTP 请求标头,因此任何中间缓存代理应该基于此标头进行缓存。 (只有某些代理对此标头有问题。)

所以,应该这样写:

Accept-Encoding

参考:


SetEnvIf Request_URI "^/flipbook" no-gzip

这不仅是“启用过滤器”,它还对所有响应启用了 DEFLATE 过滤器。这基本上呈现了多余的 # enables the filter SetOutputFilter DEFLATE 指令,因为您已经在所有内容上设置了 DEFLATE。通常,您不想在 everything 上设置它,这大概就是您使用 AddOutputFilterByType 指令的原因。

因此,如果您在特定 mime 类型上设置 DEFLATE,您可能不需要 AddOutputFilterByType 指令。或者,您使用 SetOutputFilter 并删除 SetOutputFilter 指令,但是您仍然应该使用 AddOutputFilterByType 环境变量禁用对图像和其他已压缩媒体的过滤器。

no-gzip

您不需要全部 3 个。您的服务器在发送 JavaScript 文件时只设置一种 MIME 类型 - 您可以在 HTTP 响应中看到。你只需要那个。 (可能是 AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-javascript 。)


替代解决方案

不是将 application/javascript env var 设置为禁用 mod_default,而是使用 Apache no-gzip 表达式来有条件地设置输出过滤器,仅当访问开始的 URL 时<If>

例如:

/flipbook

除非您打算将相同的代码移植到可能未启用 mod_deflate 的多个服务器(这是可以接受的),否则您实际上并不需要 <If "%{REQUEST_URI} !~ m#^/flipbook/#"> AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE application/javascript </If> 包装器。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。