DotNetCore 1.0 MVC中如何自动重定向到单个域
本文关键字:何自动 重定向 单个域 MVC DotNetCore | 更新日期: 2023-09-27 18:15:20
我有一个网站的多个域名:
http://example.com http://www.example.com http://www.example.co.uk在生产环境中,我希望主域为http://www.example.com,并希望所有其他关联域自动重定向到主域。
从历史上看,我会用URLRewrite来做这件事,但是我被引导相信在DotNetCore中不存在。
所以…我该怎么做呢?
同时,我不希望这影响到开发环境。
一个适用于DotNetCore 1.0(也强制https)的答案
Startup.cs
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
// Other configuration code here...
if (env.IsProduction())
{
app.Use(async (context, next) =>
{
if (context.Request.Host != new HostString("www.example.com"))
{
var withDomain = "https://www.example.com" + context.Request.Path;
context.Response.Redirect(withDomain);
}
else if (!context.Request.IsHttps)
{
var withHttps = "https://" + context.Request.Host + context.Request.Path;
context.Response.Redirect(withHttps);
}
else
{
await next();
}
});
}
}
.net core 6:
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
var options = new RewriteOptions()
.Add(RewriteRules.ReDirectRequestsToOneHost);
app.UseRewriter(options);
}
public class RewriteRules
{
public static void ReDirectRequestsToOneHost(RewriteContext context)
{
var request = context.HttpContext.Request;
if (request.Host != new HostString("www.example.com"))
{
var redirect = $"{request.Scheme}://www.example.com{request.Path}";
context.HttpContext.Response.Redirect(redirect);
}
}
}
你可以在。net Core中使用URLRewrite -只需下载ASP. net即可。Core 1.1预览版然后你就可以这样做:
public class Startup {
public void Configure(IApplicationBuilder app, IHostingEnvironment env) {
var options = new RewriteOptions()
.AddRedirect("(.*)/$", "$1") // Redirect using a regular expression
.AddRewrite(@"app/('d+)", "app?id=$1", skipRemainingRules: false) // Rewrite based on a Regular expression
.AddRedirectToHttps(302, 5001) // Redirect to a different port and use HTTPS
.AddIISUrlRewrite(env.ContentRootFileProvider, "UrlRewrite.xml") // Use IIS UrlRewriter rules to configure
.AddApacheModRewrite(env.ContentRootFileProvider, "Rewrite.txt"); // Use Apache mod_rewrite rules to configure
app.UseRewriter(options);
}
}
将现有项目更新为ASP。. NET Core 1.1 Preview 1你需要做以下工作:
- 下载并安装更新后的。net Core 1.1 preview 1 SDK
- 按照。net Core 1.1 Preview 1公告中的说明更新项目以使用。net Core 1.1 Preview 1 更新你的ASP。. NET Core packages依赖项以使用新的1.1.0-preview1版本
更多信息在这里:https://blogs.msdn.microsoft.com/webdev/2016/10/25/announcing-asp-net-core-1-1-preview-1/