gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 21:28:31 25 4
gpt4 key购买 nike

在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com