我在下面有以下重定向规则,将所有http流量强制为https。但是,我们需要提供一些在https中显示有问题的页面,并且需要强制将它们设为http,直到我们对其进行更新才能在https下工作。
<rule name="Redirect to https" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
</rule>
所有这些页面的共同点在于,“ / SSLA /”是URL的一部分。我不是我想成为的重写专家,但是我可以想到几种潜在的方法来解决此问题:
a)以某种方式更新此规则,以排除带有“ / SSLA /”的网址。
B)在此规则之前添加一个规则,该规则可以捕获带有“ / SSLA /”的任何内容,并在转到https时重定向到http,并且(在同一规则或单独的规则中?)对http请求也不起作用,但会停止处理,因此它不会达到此全局http到https重定向规则。
问题是,我对正则表达式或重写规则都不太满意,所以我不太确定如何完成这两个解决方案(实际上甚至都不确定这是处理此问题的“正确”方法)。 / p>
所以...请帮忙! :)
编辑:我应该注意,我已经更新了c#代码以将这些页面重定向到http,但是当然会导致上述规则循环。但是,我只是指出这一点,我需要仅是为了重定向规则,而不是将带有“ / SSLA”的页面的HTTP请求强制转换为https,因为该代码会将任何此类https请求重定向至http。但是,如果让重定向规则强制其中带有“ / SSLA /”的https请求到http也很麻烦,那么我可以删除执行相同操作的c#代码。
答案 0 :(得分:1)
尝试使用
<match url="((?!SSLA).)*" />
inste
<match url=".*" />
答案 1 :(得分:1)
您应该使用两个重写规则:
用于重定向HTTPS-> SSLA/*
页面的HTTP
用于为非SSLA/*
页重定向HTTP-> HTTPS。
在下面的示例中,我如何过滤SSLA
和non SSLA
页面
<rule name="Redirect to http SSLA" stopProcessing="true">
<match url="^SSLA" />
<conditions>
<add input="{HTTPS}" pattern="on" ignoreCase="true" />
</conditions>
<action type="Redirect" url="http://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
</rule>
<rule name="Redirect to https" stopProcessing="true">
<match url="^SSLA" nagate="true" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
</rule>