我在web.config中创建了一个重定向规则,将我的网站从http重定向到https。我遇到的问题是网站上的每个链接现在都是https。我有很多链接到其他网站没有SSL,因此我得到证书错误。这就是我所做的:
<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>
如何仅为我的域重定向https而不是我网站上的每个链接?
答案 0 :(得分:10)
实际上(ASP.NET Core 1.1)有一个名为Rewrite的middleware,其中包含您要执行的操作的规则。
您可以在Startup.cs上使用它,如下所示:
var options = new RewriteOptions()
.AddRedirectToHttpsPermanent();
app.UseRewriter(options);
答案 1 :(得分:7)
在asp.net Core 2中,您可以使用独立于Web Server的URL Rewrite Startup.Configure中的app.UseRewriter,如下所示:
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));
}
答案 2 :(得分:3)
asp.net核心&lt; 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());
});
}
答案 3 :(得分:1)
您也可以为域添加其他条件
<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
希望这有帮助!
答案 4 :(得分:1)
在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();
}
答案 5 :(得分:1)
您还需要在.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;
});
答案 6 :(得分:1)
在ASP.NET Core 2.2中,您应该使用 Startup.cs 设置将http重定向到https
因此请将其添加到 ConfigureServices :
public void ConfigureServices(IServiceCollection services)
{
services.AddHttpsRedirection(options =>
{
options.HttpsPort = 443;
}); // ===== Add this =====
}
并将其添加到配置中:
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 =====
}
然后享受它。