繁体   English   中英

如何仅为特定路径启用 gzip 压缩?

[英]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

SetEnvSetEnvIf属于单独的 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM