IIS重写:HTTP到HTTPS,反之亦然,为什么不;它不起作用
本文关键字:反之亦然 为什么不 不起作用 HTTPS 重写 HTTP IIS | 更新日期: 2023-09-27 18:26:53
我有一个页面,我必须将每个HTTP请求重定向到HTTPS请求,但在两个页面上,我必须做完全相反的操作,因为我们包含了通过HTTP加载的远程第三方脚本。
由于这是一个开发环境(Visual Studio),HTTP端口为50382,HTTPS为44300。
以下是我目前所拥有的内容(CustomerPortal是其中一个例外页面)。它不起作用,对CustomerPortal的每个请求在Chrome中都显示为"已取消"。我认为问题在于HTTP-to-HTTPS规则,该规则不排除CustomerPortal.aspx,尽管我显然为这种情况添加了一个条件。
我不知道为什么它不起作用,我不是RegEx或IIS的专家,但对我来说,规则看起来是正确的(显然不是)。
<rules>
<clear />
<rule name="HTTP to HTTPS on different SSL Port" enabled="true">
<match url="^(.*'.aspx)$" ignoreCase="true" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="true">
<add input="{HTTPS}" pattern="off" />
<add input="{HTTP_HOST}" pattern="([^/:]*?):[^/]*?" />
<add input="{SERVER_PORT}" pattern="^50382$" />
<add input="{URL}" negate="true" pattern="CustomerPortal'.aspx$" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://{C:1}:44300/{R:0}" appendQueryString="false" />
</rule>
<rule name="Redirect to http 2">
<match url="CustomerPortal'.aspx$"/>
<conditions>
<add input="{SERVER_PORT}" pattern="^44300$" />
</conditions>
<action type="Redirect" url="http://{HTTP_HOST}:50382/Guest/Portal/CustomerPortal.aspx" redirectType="Found" appendQueryString="true" />
</rule>
</rules>
好的,经过进一步的调试和测试,我发现了这个问题。规则本身是好的。问题是我如何从c#代码中调用Response.Rirect。
不起作用
Response.Redirect("~/Path/To/MyFile.aspx");
就是这样
Response.Redirect("http://mypage.com/Path/To/MyFile.aspx");
我不知道为什么它不起作用。但是,如果您在从HTTPS重定向到HTTP时使用绝对路径,反之亦然,则可以正常工作。