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



我有一个页面,我必须将每个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时使用绝对路径,反之亦然,则可以正常工作。

相关内容

最新更新