web-dev-qa-db-fra.com

ASP.NET Core redirige http en https

J'ai créé une règle de redirection dans mon web.config pour rediriger mon site Web de http à https. Le problème que j'ai est que chaque lien sur le site Web est maintenant https. J'ai beaucoup de liens vers d'autres sites Web qui n'ont pas de protocole SSL et par conséquent je reçois des erreurs de certificat. Voici ce que j'ai fait:

  <rewrite>
  <rules>
    <rule name="HTTP/S to HTTPS Redirect" enabled="true" stopProcessing="true">
      <match url="(.*)" />
      <conditions logicalGrouping="MatchAny">
        <add input="{SERVER_PORT_SECURE}" pattern="^0$" />
      </conditions>
      <action type="Redirect" url="https://{HTTP_Host}/{R:1}" redirectType="Permanent" />
    </rule>
  </rules>
</rewrite>

Comment puis-je rediriger https uniquement pour mon domaine et pas pour tous les liens de mon site Web?

6
Huby03

En réalité (ASP.NET Core 1.1), il existe un middleware nommé Rewrite qui inclut une règle pour ce que vous essayez de faire.

Vous pouvez l'utiliser sur Startup.cs comme ceci:

var options = new RewriteOptions()
    .AddRedirectToHttpsPermanent();

app.UseRewriter(options);
9
Sergio López

Dans asp.net Core 2, vous pouvez utiliser une réécriture d'URL indépendante du serveur Web en utilisant App.UseRewriter dans Startup.Configure, comme suit:

        if (env.IsDevelopment())
        {
            app.UseBrowserLink();
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");

            // todo: replace with app.UseHsts(); once the feature will be stable
            app.UseRewriter(new RewriteOptions().AddRedirectToHttps(StatusCodes.Status301MovedPermanently, 443));
        }
4
victorvartan

asp.net core <2 vient de mettre ce code dans votre startup.cs

        // IHostingEnvironment (stored in _env) is injected into the Startup class.
        if (!_hostingEnvironment.IsDevelopment())
        {
            services.Configure<MvcOptions>(options =>
            {
                options.Filters.Add(new RequireHttpsAttribute());
            });
        }

Vous pouvez également ajouter une autre condition pour le domaine,

<add input="{HTTP_Host}" negate="true" pattern="localhost" />

Remplacez "localhost" par votre nom de domaine.

<rewrite>
  <rules>
    <rule name="HTTP/S to HTTPS Redirect" enabled="true" stopProcessing="true">
      <match url="(.*)" />
      <conditions logicalGrouping="MatchAny">
        <add input="{SERVER_PORT_SECURE}" pattern="^0$" />
        <add input="{HTTP_Host}" negate="true" pattern="yourdaomainname" />
      </conditions>
      <action type="Redirect" url="https://{HTTP_Host}/{R:1}" redirectType="Permanent" />
    </rule>
  </rules>
</rewrite>

Pour plus d'informations,

http://www.softfluent.com/blog/dev/2016/12/27/Page-redirection-and-URL-Rewriting-with-ASP-NET-Core

J'espère que cela t'aides!

1
Anoop H.N

Dans ASP.NET Core 2.1, utilisez simplement ceci:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();   // <-- Add this !!!!!
    }

    app.UseHttpsRedirection(); // <-- Add this !!!!!
    app.UseStaticFiles();
    app.UseCookiePolicy();

    app.UseMvc();
}
1
Dzianis Yafimau

Vous devrez également ajouter le code suivant dans .net core 2.1 

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseCookiePolicy();

    app.UseMvc();
}

et la partie suivante dans la configuration du service

       services.AddHttpsRedirection(options =>
       {
        options.RedirectStatusCode = StatusCodes.Status307TemporaryRedirect;
        options.HttpsPort = 5001;
        });
0
Nico