HTTPS只适用于一个ASP.NET页面(Login.aspx),HTTP始终适用于网站的其余部分

本文关键字:适用于 HTTP 网站 余部 页面 一个 ASP Login HTTPS NET aspx | 更新日期: 2023-09-27 18:28:33

我有一个带有SSL证书的ASP.NET 4.0 Web表单网站。我目前可以通过HTTP或HTTPS访问该网站,它运行良好。不管这个决定的优点如何,我的经理想要的是能够去http://example.com/Login.aspx并将其重定向到https://example.com/Login.aspx以便仅在此Login.aspx页面上强制执行HTTPS。但是,当登录时(Login.aspx将用户重定向到Default.aspx),网站的其余部分需要始终为常规HTTP。

一句话:Login.aspx应该始终是HTTPS,无论用户在访问网站时输入的是HTTP还是HTTPS。网站的其余部分应该始终是HTTP。如何通过IIS或代码解决方案实现这一点?

更新1:这是我正在使用的编码解决方案。我想尝试IIS重写模块,只是等待IT支持为我安装它。RequireHttpsOn()在方法Application_BeginRequest:中的Global.asax.cs中调用

public void RequireHttpsOnLogin()
    {
        if (HttpContext.Current.Request.IsSecureConnection.Equals(false) && HttpContext.Current.Request.IsLocal.Equals(false) && HttpContext.Current.Request.FilePath.EndsWith("Login.aspx"))
        {
            //On HTTP login page on server, redirect to HTTPS
            Response.Redirect("https://" + Request.ServerVariables["HTTP_HOST"] + HttpContext.Current.Request.RawUrl);
        }
        else if (HttpContext.Current.Request.IsSecureConnection.Equals(true) && HttpContext.Current.Request.IsLocal.Equals(false) && !HttpContext.Current.Request.FilePath.EndsWith("Login.aspx"))
        {
            //Not on HTTP login page and on server, redirect to HTTP
            Response.Redirect("http://" + Request.ServerVariables["HTTP_HOST"] + HttpContext.Current.Request.RawUrl);
        }
    }

更新2:以下内容适用于登录页面为HTTPS,但不适用于其他页面始终为HTTP。

<rewrite>
      <rules>
        <rule name="Redirect HTTP to HTTPS" stopProcessing="true">
          <match url="(Login.aspx)" ignoreCase="true"/>
          <conditions>
            <add input="{HTTPS}" pattern="off" ignoreCase="true"/>
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Found"/>
        </rule>
        <rule name="Redirect to HTTP" stopProcessing="true">
          <match url="(.*)" />
          <conditions>
            <add input="{R:1}" pattern="(login.aspx)" negate="true" ignoreCase="true" />
            <add input="{HTTPS}" pattern="^ON$" />
          </conditions>
          <action type="Redirect" url="http://{HTTP_HOST}/{R:0}" redirectType="Permanent" />
        </rule>
      </rules>
    </rewrite>

HTTPS只适用于一个ASP.NET页面(Login.aspx),HTTP始终适用于网站的其余部分

尝试在Web.config 中添加以下内容

 <system.webServer>
<rewrite>
      <rules>
        <rule name="Redirect HTTP to HTTPS" stopProcessing="true">
          <match url="(Login.aspx)"/>
          <conditions>
            <add input="{HTTPS}" pattern="off" ignoreCase="true"/>
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Found"/>
        </rule>
      </rules>
    </rewrite>
  </system.webServer>

您可以将代码放在Application_BeginRequest方法中的Global.asax.cs中,以根据需要强制重定向。