0

我正在运行 IIS7 的服务器上的基于 WordPress 的网站上设置 S2Members,并且需要更改一些设置以允许将受限文件下载给成员。

为此,我需要将此规则从 apache .htaccess 转换为 iis7 web.config。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} (^|\?|&)s2member_file_download\=.+ [OR]
RewriteCond %{QUERY_STRING} (^|\?|&)no-gzip\=1
RewriteRule .* - [E=no-gzip:1]
</IfModule>

我做了一些实验,但最终导致网站崩溃,所以我认为最好在这里问一个真正知道他们在做什么的人!

4

1 回答 1

1

当提供查询字符串 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="(^|\?|&amp;)s2member_file_download\=.+" ignoreCase="false" />
                        <add input="{QUERY_STRING}" pattern="(^|\?|&amp;)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,并且您不应将它们压缩。

于 2013-03-29T01:23:21.960 回答