18143453325 在线咨询 在线咨询
18143453325 在线咨询
所在位置: 首页 > 营销资讯 > 建站知识 > ASP.NET Core通过URL重写将www的域名301到不带www的域名和强制使用https

ASP.NET Core通过URL重写将www的域名301到不带www的域名和强制使用https

时间:2023-02-09 09:18:01 | 来源:建站知识

时间:2023-02-09 09:18:01 来源:建站知识

之前写过一篇IIS通过URL重写将www的域名301到不带www的域名和强制使用https访问网站的文章,突然想到,ASP.NET Core的还没写,今天补上吧。

虽然VisualStudio创建http://ASP.NET Core网站应用的时候会有个【启用https】的选项,但是,实际现象是,这选项似乎没什么卵用,之前经过大量的google和百度,也不好找到这方面的资料,于是只能考虑url重写的方式了,同样,无论是出于安全还是搜索引擎优化的原因,我们都希望网站在访问多个类似的域名时,最好能重定向到统一的域名,比如博主的网站可以通过以下这些地址来访问:

http://www.masuit.com

http://masuit.com

https://www.masuit.com

https://masuit.com

但是,我并不希望访问上面这些不同url出现相同的页面,这对SEO来说也不友好,所以我们需要将上面这些地址都统一的永久重定向到https://masuit.com,那么怎么来实现呢?

当然,你可以说通过挂nginx、CDN、DNS等外部的方式实现URL重写,这确实也是一种解决方案,但博主我就一穷逼,家境贫寒,买不起高配的服务器,买不起CDN,也买不起高级的DNS套餐,所以只能造轮子咯,自己动手,丰衣足食!

穷逼就有穷逼的活法,当然http://ASP.NET Core应用程序也可以挂到IIS上,通过IIS进行重写,但基于性能考虑,还是直接dotnet命令行裸奔吧,通过写代码的方式实现URL重定向。

代码实现

http://ASP.NET Core为我们提供了内置的URL重写中间件Rewriter,我们只需要写自己的规则就好了,创建一个NonWwwRule类,实现自IRule,并实现ApplyRule方法:

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,其实简单太多了。

博客关联代码实现:

转自原文:



关键词:强制,使用,通过

74
73
25
news

版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭