无法获取ASP.NET URL重写以排除特定文件

时间:2012-08-01 21:40:55

标签: asp.net url-rewriting rewrite

除了文件“/blah.txt”之外,我想将所有HTTP请求重定向到我的网站。这是我一直在尝试的基本重写规则。我试过使用{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>  

2 个答案:

答案 0 :(得分:2)

感谢布莱恩改变我的思想方向。有时我会因为认为我的解决方案基于无错代码而工作。事实上,似乎重写器中存在一个错误,使我第一次尝试编写规则失败。但是,这条规则有效:

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

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

答案 1 :(得分:1)

我只看到一条似乎与一切相符的规则。这里至少需要两条规则。

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

是否有“无所事事”行动?

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