【发布时间】:2019-02-07 14:43:38
【问题描述】:
我有以下重定向规则来强制所有 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 重定向规则。
问题是,我不擅长正则表达式或重写规则,所以我不太确定如何完成这些解决方案中的任何一个(实际上甚至都不确定是否是处理这个问题的“正确”方法)。
所以...请帮忙! :)
编辑:我应该注意我已经更新了 c# 代码以将这些页面重定向到 http,但这当然会导致上述规则的循环。但我只是指出,我需要只是为了重定向规则,不要将带有“/SSLA”的页面的http请求强制为https,因为代码会将任何此类https请求重定向到http。但是,如果让重定向规则也将带有“/SSLA/”的 https 请求强制发送到 http 是一件小事,那么我可以删除执行相同操作的 c# 代码。
【问题讨论】: