如何在AspNetCore 1.1预览1中用rewritemidmiddleware重定向www到非www规则

本文关键字:www 重定向 到非 规则 rewritemidmiddleware 预览 AspNetCore 中用 | 更新日期: 2023-09-27 18:15:47

使用AspNetCore 1.1位和新的rewritemidleware,我在Startup.cs中写了这样的东西来处理www到非www的重定向:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    var options = new RewriteOptions()
        .AddRedirect("(www''.)(.*)", "$1");
    app.UseRewriter(options);
    // Code removed for brevty
}

由于RedirectRule只适用于路径而不是整个请求uri,正则表达式不匹配

如何使用相同的方法将www重定向到非www规则?我不喜欢使用iisurlrewriterrule

如何在AspNetCore 1.1预览1中用rewritemidmiddleware重定向www到非www规则

RewriteOptions允许您添加自定义规则实现。正如您所识别的,预先编写的规则不支持重定向主机名。然而,这并不太难实现。

的例子:

public class NonWwwRule : IRule
{
    public void ApplyRule(RewriteContext context)
    {
        var req = context.HttpContext.Request;
        var currentHost = req.Host;
        if (currentHost.Host.StartsWith("www."))
        {
            var newHost = new HostString(currentHost.Host.Substring(4), currentHost.Port ?? 80);
            var newUrl = new StringBuilder().Append("http://").Append(newHost).Append(req.PathBase).Append(req.Path).Append(req.QueryString);
            context.HttpContext.Response.Redirect(newUrl.ToString());
            context.Result = RuleResult.EndResponse;
        }
    }
}

你可以把它添加到RewriteOptions的Rules集合中。

        var options = new RewriteOptions();
        options.Rules.Add(new NonWwwRule());
        app.UseRewriter(options);