在ASP.net应用程序中将整个站点重定向到HTTPS

时间:2013-03-13 03:20:04

标签: asp.net .net https iis-6

我使用asp.net完成了一个项目,并准备上线了。现在管理层决定出于某些原因使用SSL,因此网站应该以HTTPS加载。

由于项目非常庞大,在所有页面中检查URL并将其重定向到HTTPS会很痛苦,有没有一种简单的方法可以全局或在我的母版页中处理它?

因此,即使使用HTTP键入网站URL,也应将其重定向到HTTPS站点。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

我与IIS6一起使用的一般方法是使用IIS中的站点属性来强制SSL;这将为在端口80上访问该站点的任何人生成403错误,因此接下来您注册一个自定义的aspx页面来处理403错误并使其将用户重定向到安全站点。

  1. 转到您站点的属性(在IIS中),目录安全性,单击“按安全通信编辑”和“要求安全通道(SSL)”。现在,这会强制整个网站使用SSL。如果您现在访问该网站,则应该收到403; 4错误。
  2. 转到自定义错误标签,选择403; 4错误,并将其设置为您网站上的网址(例如/403.4.aspx)
  3. 创建此403.4.aspx页面。最简单的可能只是Response.Redirect("https://www.mydomain.com"),但更好的是重定向到正确的页面并维护任何查询字符串。我目前没有开发环境来测试这个,但我认为它会是这样的:

    Response.Redirect( "https://" + Request.ServerVariables("HTTP_HOST") + Request.ServerVariables("URL") );

  4. 返回IIS,在此403.4.aspx页面上设置属性,使其不需要安全通道。

  5. 现在,当有人试图访问您网站的任何页面时,IIS会将它们发送到403.4.aspx页面,该页面会将它们重定向到安全网站。

答案 1 :(得分:0)

如果您不想像Nate建议的那样按照每个IIS控制它,您只需在global.asax中执行重定向:

void Application_BeginRequest(Object sender, EventArgs e)
{
    if (Request.Url.Scheme != "https")
        Response.Redirect("https://yoursite.com");
}

可能不是最机智的解决方案,但它可以胜任。