在重写ASP.NET URL以排除特定文件时遇到问题



我想将所有到我的网站的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>  

感谢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>  

将匹配规则放在另一个规则之前并使其停止处理规则似乎是有效的。

我只看到一条规则。。。这似乎与一切都匹配。你至少需要两条规则。

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

有"什么都不做"的行为吗?

是否有任何全包规则与所有请求匹配?你可能需要把blah.txt规则放在第一位。

最新更新