1

我想将所有到我网站的 HTTP 请求重定向到 HTTPS,但文件“/blah.txt”除外。这是我一直在尝试的基本重写规则。我尝试使用 {REQUEST_FILENAME} 和 {URL}。我尝试了几种我认为应该匹配的不同模式。

下面的规则将每个请求重定向到 HTTPS,包括对 blah.txt 的请求

        <rewrite>
        <rules>
            <clear />
            <rule name="Redirect to HTTPS" stopProcessing="true">
                <match url="(.*)" />
                <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                    <add input="{HTTPS}" pattern="^OFF$" />
                    <add input="{REQUEST_FILENAME}" matchType="Pattern" pattern="blah\.txt$" ignoreCase="true" negate="true" />
                </conditions>
                <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" />
            </rule>
        </rules>
    </rewrite>  
4

2 回答 2

2

感谢 Bryan 改变了我的思路。有时我会认为我的解决方案将基于无错误代码工作。事实上,重写器中似乎存在一个错误,使我第一次尝试编写规则失败。但是,此规则确实有效:

     <rewrite>
        <rules>
            <clear />
            <rule name="Temp" stopProcessing="true">
                <match url="(.*)" />
                <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                    <add input="{REQUEST_FILENAME}" pattern="blah\.txt$" />
                </conditions>
                <action type="None" />
            </rule>
            <rule name="Redirect to HTTPS" stopProcessing="true">
                <match url="(.*)" />
                <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                    <add input="{HTTPS}" pattern="^OFF$" />
                </conditions>
                <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" />
            </rule>
        </rules>
    </rewrite>  

将匹配规则放在其他规则之前并使其停止处理规则似乎有效。

于 2012-08-06T16:34:41.353 回答
1

我只看到一个规则......似乎与所有内容都匹配。这里至少需要两条规则。

我对 IIS 重写的功能不太熟悉。所以两个问题:

有没有“什么都不做”的动作?

任何包罗万象的规则都不会匹配所有请求吗?您可能需要将 blah.txt 规则放在首位。

于 2012-08-02T00:14:34.480 回答