时间:2023-02-09 09:18:01 | 来源:建站知识
时间:2023-02-09 09:18:01 来源:建站知识
之前写过一篇IIS通过URL重写将www的域名301到不带www的域名和强制使用https访问网站的文章,突然想到,ASP.NET Core的还没写,今天补上吧。 public class NonWwwRule : IRule { public void ApplyRule(RewriteContext context) { } }
方法参数RewriteContext可从中获取到当前的请求路径,以及HttpContext对象,便可以实现Redirect: public class NonWwwRule : IRule { public void ApplyRule(RewriteContext context) { var req = context.HttpContext.Request; var currentHost = req.Host; // 如果是本地调试的时候,不进行重写 if (currentHost.Host.Equals("127.0.0.1") || currentHost.Host.Equals("localhost", StringComparison.InvariantCultureIgnoreCase)) { context.Result = RuleResult.ContinueRules; return; } // 如果scheme是http或者域名是www.的,进行301重定向到不带www的并且是https的 if (req.Scheme.Equals("http") || currentHost.Host.Contains("www.")) { context.HttpContext.Response.Redirect("https://" + currentHost.Value.Replace("www.", string.Empty) + req.PathBase + req.Path + req.QueryString); context.Result = RuleResult.EndResponse; } } }
再为Rewriter的RewriteOptions写个扩展方法,作用是将上面的规则添加到Rewriter中: public static class RewriteOptionsExtensions { public static RewriteOptions AddRedirectToNonWww(this RewriteOptions options) { options.Rules.Add(new NonWwwRule()); return options; } }
规则定义好以后,在Startup中进行配置:app.UseHttpsRedirection().UseRewriter(new RewriteOptions().AddRedirectToNonWww());
现在,http://ASP.NET Core网站应用的裸奔重写即实现,相比IIS,其实简单太多了。关键词:强制,使用,通过