如何在 htaccess 中为文件夹禁用 gzip 压缩
How to disable gzip compression in htaccess for a folder
我想禁用文件夹 xxx 的 gzip 文件夹。查看 Whosebug,我试过这个:
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
(case-sensitive) 开头的 URL。设置 no-gzip
环境变量会禁用 mod_deflate.
的 DEFLATE 过滤器
但是,正则表达式中的 (.*)
部分完全是多余的。而且,除非您在自己的指令中专门使用 dont-vary
env var,否则这不会执行任何操作。我不认为 dont-vary
是一个“特殊的”Apache env var。 Apache 有 force-no-vary
,它可以做 dont-vary
可能打算做的事情,但是,我不认为你应该禁用 Vary
header,因为 mod_deflate 根据从客户端发送的 Accept-Encoding
HTTP 请求 header 应用过滤器,因此任何中间缓存代理 应该 基于此 header 缓存。 (只有某些代理有此问题 header。)
所以,应该这样写:
SetEnvIf Request_URI "^/flipbook" no-gzip
参考:
# enables the filter
SetOutputFilter DEFLATE
这不仅仅是“启用过滤器”,它还对 所有 响应启用 DEFLATE 过滤器。这基本上使后面的 AddOutputFilterByType
指令变得多余,因为您已经在所有内容上设置了 DEFLATE。通常,您不想在 everything 上设置它,这可能是您使用 AddOutputFilterByType
指令的原因。
因此,如果您在特定 mime-types 上设置 DEFLATE,您可能不需要 SetOutputFilter
指令。或者,您使用 SetOutputFilter
并删除 AddOutputFilterByType
指令,但您仍应使用 no-gzip
env var.
禁用图像和其他已压缩媒体的过滤器
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
您不需要全部 3 个。您的服务器在发送 JavaScript 文件时只设置了一个 mime-type - 您可以在 HTTP 响应中看到。你只需要那个。 (大概application/javascript
。)
备选方案
不是将 no-gzip
env var 设置为禁用 mod_default,而是使用 Apache <If>
表达式仅在 不是时有条件地设置输出过滤器 访问 URL 开始于 /flipbook
.
例如:
<If "%{REQUEST_URI} !~ m#^/flipbook/#">
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/javascript
</If>
你并不真的需要 <IfModule>
包装器,除非你打算将相同的代码移植到可能未启用 mod_deflate 的多个服务器(这是可以接受的)。
我想禁用文件夹 xxx 的 gzip 文件夹。查看 Whosebug,我试过这个:
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
(case-sensitive) 开头的 URL。设置 no-gzip
环境变量会禁用 mod_deflate.
但是,正则表达式中的 (.*)
部分完全是多余的。而且,除非您在自己的指令中专门使用 dont-vary
env var,否则这不会执行任何操作。我不认为 dont-vary
是一个“特殊的”Apache env var。 Apache 有 force-no-vary
,它可以做 dont-vary
可能打算做的事情,但是,我不认为你应该禁用 Vary
header,因为 mod_deflate 根据从客户端发送的 Accept-Encoding
HTTP 请求 header 应用过滤器,因此任何中间缓存代理 应该 基于此 header 缓存。 (只有某些代理有此问题 header。)
所以,应该这样写:
SetEnvIf Request_URI "^/flipbook" no-gzip
参考:
# enables the filter SetOutputFilter DEFLATE
这不仅仅是“启用过滤器”,它还对 所有 响应启用 DEFLATE 过滤器。这基本上使后面的 AddOutputFilterByType
指令变得多余,因为您已经在所有内容上设置了 DEFLATE。通常,您不想在 everything 上设置它,这可能是您使用 AddOutputFilterByType
指令的原因。
因此,如果您在特定 mime-types 上设置 DEFLATE,您可能不需要 SetOutputFilter
指令。或者,您使用 SetOutputFilter
并删除 AddOutputFilterByType
指令,但您仍应使用 no-gzip
env var.
AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-javascript
您不需要全部 3 个。您的服务器在发送 JavaScript 文件时只设置了一个 mime-type - 您可以在 HTTP 响应中看到。你只需要那个。 (大概application/javascript
。)
备选方案
不是将 no-gzip
env var 设置为禁用 mod_default,而是使用 Apache <If>
表达式仅在 不是时有条件地设置输出过滤器 访问 URL 开始于 /flipbook
.
例如:
<If "%{REQUEST_URI} !~ m#^/flipbook/#">
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/javascript
</If>
你并不真的需要 <IfModule>
包装器,除非你打算将相同的代码移植到可能未启用 mod_deflate 的多个服务器(这是可以接受的)。