【问题标题】:Redirecting the whole site to HTTPS in ASP.net application在 ASP.net 应用程序中将整个站点重定向到 HTTPS
【发布时间】:2013-02-28 20:45:44
【问题描述】:
我已经使用 asp.net 完成了一个项目,并准备上线。现在,由于某些原因,管理层决定使用 SSL,因此网站应该以 HTTPS 加载。
由于项目很大,在所有页面中检查 URL 并将其重定向到 HTTPS 会很痛苦,有没有一种简单的方法可以全局或在我的母版页中处理?
因此,即使网站 URL 是使用 HTTP 键入的,也应该将其重定向到 HTTPS 站点。我怎样才能做到这一点?
【问题讨论】:
标签:
asp.net
.net
https
iis-6
【解决方案1】:
我对 IIS6 使用的一般方法是使用 IIS 中的站点属性来强制 SSL;这将为通过端口 80 访问站点的任何人生成 403 错误,因此接下来您注册一个自定义 aspx 页面来处理 403 错误并将用户重定向到安全站点。
- 转到站点的属性(在 IIS 中),目录安全,单击通过安全通信编辑,并要求安全通道 (SSL)。现在,这会强制整个站点使用 SSL。如果您现在访问该站点,您应该会收到 403;4 错误。
- 转到“自定义错误”选项卡,选择 403;4 错误,并将其设置为您网站上的 URL(例如 /403.4.aspx)
-
创建这个 403.4.aspx 页面。最简单的可能只是Response.Redirect("https://www.mydomain.com"),但更好的是重定向到正确的页面并维护任何查询字符串。我目前没有开发环境来测试它,但我认为它会是这样的:
Response.Redirect( "https://" +
Request.ServerVariables("HTTP_HOST") +
Request.ServerVariables("URL") );
返回 IIS,设置此 403.4.aspx 页面上的属性,使其不需要安全通道。
现在,当有人试图访问您网站的任何页面时,IIS 会将他们发送到 403.4.aspx 页面,该页面会将他们重定向到安全网站。
【解决方案2】:
如果您不想像 Nate 建议的那样根据 IIS 来控制它,您可以简单地在 global.asax 中进行重定向:
void Application_BeginRequest(Object sender, EventArgs e)
{
if (Request.Url.Scheme != "https")
Response.Redirect("https://yoursite.com");
}
可能不是最机智的解决方案,但确实可以。