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 并关闭开发环境的方法的主要内容,如果未能解决你的问题,请参考以下文章

Apache:使用通配符永久重定向到 HTTPS

如何将 `http://` 和 `www.` URL 永久重定向到 `https://`?

从 Apache VirtualHost 将 HTTPS 永久重定向到 HTTP

如何在 ASP.Net MVC 中执行 301 永久重定向路由

asp.net mvc,做 301 永久重定向

如何在 MVC 应用程序(IIS7.5)中将 HTTP 重定向到 HTTPS