Web.configでリダイレクトルールを作成し、Webサイトをhttpからhttpsにリダイレクトしました。私が抱えている問題は、ウェブサイト上のすべてのリンクがhttpsになっていることです。 SSLを持たない他のWebサイトへのリンクがたくさんあるため、証明書エラーが発生します。これは私がやったことです:
<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>
Webサイト上のすべてのリンクではなく、ドメインのみでhttpsをリダイレクトするにはどうすればよいですか?
実際(ASP.NET Core 1.1)には、 ミドルウェア というRewriteという名前のRewriteがあり、これには実行しようとしていることのルールが含まれています。
Startup.csで次のように使用できます。
var options = new RewriteOptions()
.AddRedirectToHttpsPermanent();
app.UseRewriter(options);
Asp.net Core 2では、Startup.Configureでapp.UseRewriterを次のように使用することにより、Webサーバーとは無関係にURL書き換えを使用できます。
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));
}
ASP.NET Core 2.2では、httpをhttpsにリダイレクトするためのStartup.cs設定を使用する必要があります
これをConfigureServicesに追加します:
public void ConfigureServices(IServiceCollection services)
{
services.AddHttpsRedirection(options =>
{
options.HttpsPort = 443;
}); // ===== Add this =====
}
そして、これをConfigureに追加します:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts(); // ===== Add this =====
}
app.UseHttpsRedirection(); // ===== Add this =====
}
それを楽しんでください。
asp.net core <2は、このコードをstartup.csに入れるだけです
// IHostingEnvironment (stored in _env) is injected into the Startup class.
if (!_hostingEnvironment.IsDevelopment())
{
services.Configure<MvcOptions>(options =>
{
options.Filters.Add(new RequireHttpsAttribute());
});
}
.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();
}
およびサービス構成の次の部分
services.AddHttpsRedirection(options =>
{
options.RedirectStatusCode = StatusCodes.Status307TemporaryRedirect;
options.HttpsPort = 5001;
});
ドメインに別の条件を追加することもできますが、
<add input="{HTTP_Host}" negate="true" pattern="localhost" />
「localhost」をドメイン名に置き換えます。
<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>
詳細については、
https://www.softfluent.com/blog/dev/2016/12/27/Page-redirection-and-URL-Rewriting-with-ASP-NET-Core
お役に立てれば!
ASP.NET Core 2.1では、これを使用するだけです:
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();
}