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 MVC中如何自动重定向到单个域

一个适用于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/