使用 AspNetCore 1.1 位和新的 RewriteMiddleware 我写了这样的东西到 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 规则?我不想使用 IISUrlRewriteRule

最佳答案

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 上的规则集合中。
        var options = new RewriteOptions();
        options.Rules.Add(new NonWwwRule());

        app.UseRewriter(options);

关于c# - 如何使用 RewriteMiddleware 在 AspNetCore 1.1 preview 1 中将 www 重定向到非 www 规则?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40334591/

10-16 10:38