当提供查询字符串 no-gzip == 1 或其他 member_file_download... 条件时,上面的规则似乎试图禁用 GZIP 压缩。
要在 IIS 中使用 URL 重写来实现这一点,您需要在 web.config 中使用相同的逻辑,但使用它来覆盖/删除 Accept-Encoding 标头,以便服务器看不到“接受编码 gzip/deflate”告诉它压缩。
所以有两个步骤:
首先,在 \windows\system32\inetsrv\config\ApplicationHost.config 中添加一个服务器变量设置,以便服务器允许覆盖服务器设置(您也可以在 UI 中使用服务器变量链接)。
<system.webServer>
<rewrite>
<allowedServerVariables>
<add name="HTTP_ACCEPT_ENCODING" />
</allowedServerVariables>
</rewrite>
</system.webServer>
然后你想在你的 web.config 中添加实际的重写规则,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="DisableGZIP">
<match url=".*" ignoreCase="false" />
<conditions logicalGrouping="MatchAny">
<add input="{QUERY_STRING}" pattern="(^|\?|&)s2member_file_download\=.+" ignoreCase="false" />
<add input="{QUERY_STRING}" pattern="(^|\?|&)no-gzip\=1" ignoreCase="false" />
</conditions>
<action type="None" />
<serverVariables>
<set name="HTTP_ACCEPT_ENCODING" value="" />
</serverVariables>
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
这应该有效,要对其进行测试,您可以将查询字符串 ?no-gzip=1 传递给任何 URL,并且您不应将它们压缩。