How to redirect HTTP to HTTPS in MVC application (IIS7.5)

前端 未结 11 2076
情歌与酒
情歌与酒 2020-11-29 21:39

I need to redirect my HTTP site to HTTPS, have added below rule but I am getting 403 Error when tried using http://www.example.com, it works fine when I type https://www.exa

相关标签:
11条回答
  • 2020-11-29 22:06

    In the Global.asax.cs:

    Simple redirect

    protected void Application_BeginRequest()
    {
        if (!Context.Request.IsSecureConnection
            && !Context.Request.IsLocal // to avoid switching to https when local testing
            )
        {
            // Only insert an "s" to the "http:", and avoid replacing wrongly http: in the url parameters
            Response.Redirect(Context.Request.Url.ToString().Insert(4, "s"));
        }
    }
    

    301 redirect: SEO best practice (Search Engine Optimization)

    The 301 Moved Permanently redirect status response code is considered a best practice for upgrading users from HTTP to HTTPS (see Google recommendations).

    So if Google or Bing robots will be redirected too, consider this:

    protected void Application_BeginRequest()
    {
        if (!Context.Request.IsSecureConnection
            && !Context.Request.IsLocal // to avoid switching to https when local testing
            )
        {
            Response.Clear();
            Response.Status = "301 Moved Permanently";
            Response.AddHeader("Location", Context.Request.Url.ToString().Insert(4, "s"));
            Response.End();
        }
    }
    
    0 讨论(0)
  • 2020-11-29 22:11

    You can do it in code:

    Global.asax.cs

    protected void Application_BeginRequest(){
        if (!Context.Request.IsSecureConnection)
            Response.Redirect(Context.Request.Url.ToString().Replace("http:", "https:"));
    }
    

    Or You could add the same code to an action filter:

    public class SSLFilter : ActionFilterAttribute {
    
        public override void OnActionExecuting(ActionExecutingContext filterContext){
            if (!filterContext.HttpContext.Request.IsSecureConnection){
                var url = filterContext.HttpContext.Request.Url.ToString().Replace("http:", "https:");
                filterContext.Result = new RedirectResult(url);
            }
        }
    }
    
    0 讨论(0)
  • 2020-11-29 22:15

    I'm unable to add comments, but thought this supplementary info would maybe help somebody.

    I implemented the Global.asax idea with the 301 Permanent Redirect, and added http binding to the site in IIS. It still gave me 403 Forbidden until I remembered to untick "Require SSL" in SSL Settings.

    0 讨论(0)
  • 2020-11-29 22:19

    I did it thusly, since a local debug session uses custom port numbers:

        protected void Application_BeginRequest()
        {
            if (!Context.Request.IsSecureConnection)
            {
                if (HttpContext.Current.Request.IsLocal)
                {
                    Response.Redirect(Context.Request.Url.ToString().Replace("http://localhost:25885/", "https://localhost:44300/"));
                }
                else
                {
                    Response.Redirect(Context.Request.Url.ToString().Replace("http://", "https://"));
                }
            }
        }
    

    Preferably there would be some way to get the URL and SSL URL programmatically...

    0 讨论(0)
  • 2020-11-29 22:21

    I have the following ASP.NET MVC rewrite rule in Web.config file:

    You can try this code with web.config file. If your URL is http://www.example.com then it will be redirect to this URL https://www.example.com.

    <system.webServer>
        <rewrite>
            <rules>
                 <rule name="http to https" stopProcessing="true">
                  <match url="(.*)" />
                  <conditions>
                   <add input="{HTTPS}" pattern="^OFF$" />
                  </conditions>
                  <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>

    0 讨论(0)
提交回复
热议问题