我有一个页面,我必须将每个HTTP请求重定向到HTTPS请求,除了两个页面,我必须完全相反,因为我们包含一个通过HTTP加载的远程第三方脚本。
由于这是一个开发环境(Visual Studio),因此HTTP端口为50382,HTTPS为44300。
这是我到目前为止(CustomerPortal是特殊页面之一)。 它不起作用,每个CustomerPortal请求在Chrome中显示为“已取消”。我认为问题是HTTP到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>
答案 0 :(得分:0)
好的,经过进一步调试和测试后,我发现了问题。 规则本身很好。 问题是我如何从我的c#代码中调用 Response.Redirect 。
这不起作用
Response.Redirect("~/Path/To/MyFile.aspx");
这样做
Response.Redirect("http://mypage.com/Path/To/MyFile.aspx");
我不知道为什么它不起作用。但是,如果在从HTTPS重定向到HTTP时使用绝对路径,反之亦然,它会按预期工作。