it-swarm.com.de

So leiten Sie HTTP in der MVC-Anwendung (IIS7.5) zu HTTPS um

Ich muss meine HTTP-Site zu HTTPS umleiten, habe die folgende Regel hinzugefügt, aber es wird ein 403-Fehler angezeigt, wenn ich versucht habe, http://www.example.com zu verwenden. Das funktioniert einwandfrei, wenn ich https: // www eingebe .example.com im Browser.

<system.webServer>
    <rewrite>
        <rules>
            <rule name="HTTP to HTTPS redirect" stopProcessing="true">
                <match url="(.*)" />
                <conditions>
                    <add input="{HTTPS}" pattern="off" ignoreCase="true" />
                </conditions>
                <action type="Redirect" redirectType="Found" url="https://{HTTP_Host}/{R:1}" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>
48
LLM

Ich verwende in Global.asax folgendes:

protected void Application_BeginRequest()
{
  if (FormsAuthentication.RequireSSL && !Request.IsSecureConnection)
  {
    Response.Redirect(Request.Url.AbsoluteUri.Replace("http://", "https://"));
  }
}
6
Debasis Goswami

Sie können es im Code tun:

Global.asax.cs

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

Oder Sie können den gleichen Code einem Aktionsfilter hinzufügen:

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);
        }
    }
}
108
Chris Kooken

Im Global.asax.cs:

Einfache Weiterleitung

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 Weiterleitung: SEO Best Practice (Suchmaschinenoptimierung)

Der 301 Moved Permanently-Umleitungsstatus-Antwortcode gilt als bewährte Methode für das Upgrade von Benutzern von HTTP auf HTTPS ( siehe Google-Empfehlungen ). 

Wenn also auch Google- oder Bing-Roboter umgeleitet werden, bedenken Sie Folgendes:

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();
    }
}
36

Sie können das RequireHttpsAttribute für einfache Fälle verwenden. 

[RequireHttps]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}

Wie in MSDN angegeben ...

"Stellt ein Attribut dar, das eine ungesicherte HTTP-Anforderung erzwingt, über HTTPS erneut gesendet zu werden."

RequireHttpsAttribute

Ich bin nicht sicher, ob Sie dies zur Erzwingung von HTTPS auf einer großen Site verwenden möchten. Viel zu dekorieren und die Möglichkeit, Controller zu verpassen.

2
Nattrass

Ich habe es so gemacht, da eine lokale Debugsitzung benutzerdefinierte Portnummern verwendet:

    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://"));
            }
        }
    }

Vorzugsweise gibt es eine Möglichkeit, die URL und die SSL-URL programmgesteuert abzurufen ...

2
Paul Williams

Ich habe die folgende ASP.NET MVC-Umschreiberegel in der Datei Web.config:

Sie können diesen Code mit der Datei web.config versuchen. Wenn Ihre URL http://www.example.com ist, wird sie an diese URL https://www.example.com weitergeleitet.

<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>

1
Manish Kumar

So erzwingen Sie https nur, wenn die Website auf dem Server zu Mittag gegessen wird, und ignorieren Sie es, während Sie die Website auf Ihrem Computer für die Entwicklung ausführen:

In Global.asax:

Sie benötigen die Application_BeginRequest () -Methode

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
         // .....
    }

    //force https on server, ignore it on local machine
    protected void Application_BeginRequest()
    {
        if (!Context.Request.IsSecureConnection && !Context.Request.Url.ToString().Contains("localhost"))
            Response.Redirect(Context.Request.Url.ToString().Replace("http:", "https:"));
    }
}
1
Adel Mourad

Verwenden Sie diesen Code in der Datei web.config, um http: // zu https: // umzuleiten.

 <configuration>
 <system.webServer>
 <rewrite>
 <rules>
 <rule name="HTTPS force" enabled="true" stopProcessing="true">
 <match url="(.*)" />
 <conditions>
 <add input="{HTTPS}" pattern="^OFF$" />
 </conditions>
 <action type="Redirect" url="https://{HTTP_Host}{REQUEST_URI}" redirectType="Permanent" />
 </rule>
 </rules>
 </rewrite>
 </system.webServer>
</configuration>
0
Deepak Jha

Diese Antwort ist nicht genau für OP, aber für diejenigen, die es nicht so machen konnten wie ich und auf diese gestoßen sind (und obwohl ich weiß, dass es im OP 403 keinen 404-Fehler gibt), beziehen Sie sich bitte auf diese Antwort, wenn Sie stattdessen 404 erhalten: https://stackoverflow.com/a/6962829/5416602

Überprüfen Sie, ob in Ihrem IIS eine Bindung für den HTTP-Port (80) und nicht nur für den HTTPS-Port (443) vorhanden ist

0
Umair Malhi

Ich kann keine Kommentare hinzufügen, dachte aber, dass diese zusätzlichen Informationen jemandem helfen könnten.

Ich habe die Global.asax-Idee mit dem 301 Permanent Redirect implementiert und der Site in IIS eine http-Bindung hinzugefügt. Es gab mir immer noch 403 Forbidden, bis ich daran dachte, "Require SSL" in den SSL-Einstellungen zu deaktivieren.

0
cherry