IIS重写:HTTP到HTTPS,反之亦然,为什么它不起作用

时间:2015-12-15 11:08:57

标签: c# regex iis url-rewriting

我有一个页面,我必须将每个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>

1 个答案:

答案 0 :(得分:0)

好的,经过进一步调试和测试后,我发现了问题。 规则本身很好。 问题是我如何从我的c#代码中调用 Response.Redirect

这不起作用

Response.Redirect("~/Path/To/MyFile.aspx");

这样做

Response.Redirect("http://mypage.com/Path/To/MyFile.aspx");

我不知道为什么它不起作用。但是,如果在从HTTPS重定向到HTTP时使用绝对路径,反之亦然,它会按预期工作。