MVC 永久使用重定向 HTTP 到 HTTPS 并关闭开发环境的方法
Posted
技术标签:
【中文标题】MVC 永久使用重定向 HTTP 到 HTTPS 并关闭开发环境的方法【英文标题】:MVC Permanent way to use redirects for HTTP to HTTPS and turn off for Dev Environment 【发布时间】:2016-08-30 18:41:39 【问题描述】:我从here 得到这个代码。
请注意,我删除了重定向到 ISSExpress 44300 端口的部分,因为我想在没有 https 的开发盒上使用 II7.5。
public class CustomRequireHttpsFilter : RequireHttpsAttribute
protected override void HandleNonHttpsRequest(AuthorizationContext filterContext)
// The base only redirects GET, but we added HEAD as well. This avoids exceptions for bots crawling using HEAD.
// The other requests will throw an exception to ensure the correct verbs are used.
// We fall back to the base method as the mvc exceptions are marked as internal.
if (!String.Equals(filterContext.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase)
&& !String.Equals(filterContext.HttpContext.Request.HttpMethod, "HEAD", StringComparison.OrdinalIgnoreCase))
base.HandleNonHttpsRequest(filterContext);
// Redirect to HTTPS version of page
// We updated this to redirect using 301 (permanent) instead of 302 (temporary).
string url = "https://" + filterContext.HttpContext.Request.Url.Host + filterContext.HttpContext.Request.RawUrl;
//if (string.Equals(filterContext.HttpContext.Request.Url.Host, "localhost", StringComparison.OrdinalIgnoreCase))
//
// // For localhost requests, default to IISExpress https default port (44300)
// url = "https://" + filterContext.HttpContext.Request.Url.Host + ":44300" + filterContext.HttpContext.Request.RawUrl;
//
filterContext.Result = new RedirectResult(url, true);
然后,在我的 FilterDonfig.cs 中添加了这个。它的作用是仅在 Web.config 具有“Debug=false”时才使用上面的覆盖,这就是它在生产中所具有的。我不需要在我的开发环境中运行 Release,我也不想配置本地 IIS 来处理 SSL。请注意,我删除了“RequireHttpsAttribute()”并使用了上面的新的。
public class FilterConfig
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
filters.Add(new HandleErrorAttribute());
if (!HttpContext.Current.IsDebuggingEnabled)
/////filters.Add(new RequireHttpsAttribute());
filters.Add(new CustomRequireHttpsFilter());
我做对了吗?这是如何确保 SEO 得到优化,因为搜索机器人只跟踪一个网站?我的理解是,“http”和“https”被搜索引擎视为 2 个独立的网站。我在正确的地方这样做吗?不知道我遇到了什么其他代码。
================
我向我的 ISP 询问了如何进行永久重定向并提出了这个解决方案,他们说:
尊敬的客户, 我们没有设置重定向。但是,我们更正了 IIS 中的 https 绑定设置以解决问题。
我想知道 IIS 是否可以做同样的事情,而这正是他们所做的。我希望我在正确的论坛:)
【问题讨论】:
【参考方案1】:如何在 IIS 级别使用 URL rewrite module:http://forums.iis.net/t/1153050.aspx?URL+Rewrite+for+SSL+redirection 执行此操作
要在 dev 中关闭它,只需在 dev web.config 中将启用的规则设置为 false,但为所有设置了 HTTPS 的服务器/环境启用它。
我过去使用过它,它的效果非常好。避免使用与应用无关的代码使您的应用变得混乱。
【讨论】:
是的。谢谢。我刚刚在我的 www.smarter.asp.com 托管面板上看到我可以做到这一点。这也适用于规范的“www”和结尾斜杠吗? 是的,它会生成一个正则表达式模式,您可以根据正则表达式的核心内容进行调整 谢谢 LDJ。这个周末我会努力的。我认为这是一个很好的答案并解释了原因。以上是关于MVC 永久使用重定向 HTTP 到 HTTPS 并关闭开发环境的方法的主要内容,如果未能解决你的问题,请参考以下文章
如何将 `http://` 和 `www.` URL 永久重定向到 `https://`?
从 Apache VirtualHost 将 HTTPS 永久重定向到 HTTP