[英]How to enable gzip compression only for specific path?
我正在尝试在我的 apache 实例(Apache/2.4.38 (Debian))中设置压缩,以便仅在 Request_URI 与一个 api 端点匹配时压缩响应,例如
我希望启用压缩:
/api/endpoint/123
,/api/endpoint/456
但不是为了
api/endpoint2/12
,api/endpoint/123/action
,api/endpoint/test
我确信 mod_deflate 已启用。 我的想法是首先使用 no-gzip 变量禁用 gzip,然后在 URI 匹配正则表达式时删除该变量:
<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
SetEnv no-gzip 1
SetEnvIf Request_URI "/api/endpoint/\d+$" !no-gzip
</IfModule>
不幸的是,它不起作用,并且没有响应被压缩......
SetEnv no-gzip 1 SetEnvIf Request_URI "/api/endpoint/\d+$" !no-gzip
SetEnv
和SetEnvIf
属于单独的 Apache 模块(分别是 mod_env 和 mod_setenvif)。 mod_setenvif 在 mod_env之前处理,尽管配置文件中指令的明显顺序,所以上面总是将no-gzip
设置为1
。
尝试使用 mod_setenvif 来初始化no-gzip
env var:
SetEnvIf ^ ^ no-gzip
这基本上无条件地将no-gzip
设置为1
(默认)(对于任何请求标头)。
(不幸的是,我认为这是使用 mod_setenvif无条件设置环境变量的最简单方法。)
另外:您也许应该将正则表达式锚定在 URL 路径的开头: "^/api/endpoint/\d+$"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.