我想将所有到我的网站的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规则放在第一位。