regex - 使用 Asp.Net Core 中间件将非 WWW 重定向到 WWW

标签 regex asp.net-core url-rewriting asp.net-core-middleware

在 ASP.Net Core 应用程序启动时,我有:

RewriteOptions rewriteOptions = new RewriteOptions(); 

rewriteOptions.AddRedirectToHttps();

applicationBuilder.UseRewriter(rewriteOptions);

在生产中,我需要将所有非 WWW 重定向到 WWW Urls

例如:
domain.com/about > www.domain.com/about

如何使用重写中间件来做到这一点?

我认为这可以使用 AddRedirect 和 Regex 来完成:

Github - ASP.NET Core Redirect Docs

但不知道该怎么做...

最佳答案

可重用的替代方法是创建自定义重写规则和相应的扩展方法,以将规则添加到重写选项。这与 AddRedirectToHttps 的工作方式非常相似。

自定义规则:

public class RedirectToWwwRule : IRule
{
    public virtual void ApplyRule(RewriteContext context)
    {
        var req = context.HttpContext.Request;
        if (req.Host.Host.Equals("localhost", StringComparison.OrdinalIgnoreCase))
        {
            context.Result = RuleResult.ContinueRules;
            return;
        }

        if (req.Host.Value.StartsWith("www.", StringComparison.OrdinalIgnoreCase))
        {
            context.Result = RuleResult.ContinueRules;
            return;
        }

        var wwwHost = new HostString($"www.{req.Host.Value}");
        var newUrl = UriHelper.BuildAbsolute(req.Scheme, wwwHost, req.PathBase, req.Path, req.QueryString);
        var response = context.HttpContext.Response;
        response.StatusCode = 301;
        response.Headers[HeaderNames.Location] = newUrl;
        context.Result = RuleResult.EndResponse;
    }
}

扩展方法:
public static class RewriteOptionsExtensions
{
    public static RewriteOptions AddRedirectToWww(this RewriteOptions options)
    {
        options.Rules.Add(new RedirectToWwwRule());
        return options;
    }
}

用法:
var options = new RewriteOptions();
options.AddRedirectToWww();
options.AddRedirectToHttps();
app.UseRewriter(options);

重写中间件的 future 版本将包含规则和相应的扩展方法。见 this pull request

关于regex - 使用 Asp.Net Core 中间件将非 WWW 重定向到 WWW,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43823413/

相关文章:

c# - 搭建 Db Context 并自动移除 OnConfiguring 方法

asp.net-core - 如何在没有模型的 Razor 页面上使用 IPageFilter

azure - 在 IIS 中托管 ASP Net Core 应用程序时无限页面加载

apache - 使用重写规则通过 htaccess 传递变量

.net - 正则表达式(.NET 方言): strange behaviour of a capturing group

javascript - 如何避免node.js自然地分割带有特殊字符的单词

r - 如何在 R 中使用正则表达式检测和删除缩写?

java - 如何从 ifs 文本文件中提取 2D double 组 (Java)

php - 通配符子域和 CodeIgniter 路由

php - 我需要使用 .htaccess 将自定义单词添加到我的 URL 中