1. 首页
  2. 文章列表
  3. ASP.NET Core通过URL重写将www的域名301到不带www的域名和强制使用https访问网站

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

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

http://www.masuit.com

http://masuit.com

https://www.masuit.com

https://masuit.com

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

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

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

代码实现

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());

现在,ASP.NET Core网站应用的裸奔重写即实现,相比IIS,其实简单太多了。

博客关联代码实现:https://github.com/ldqk/Masuit.MyBlogs/blob/master/src/Masuit.MyBlogs.Core/Extensions/NonWwwRule.cs

分享到:

公益机场优云666,每日签到免费领流量 [推广]

公益机场优云666,每日签到免费领流量

真正大鸡场,100多个节点,V2ray节点50多个。港台美日新均有白嫖节点,每日签到送1-7G流量。多条BGP中转/Azure/Dmit/HKT/Hinet/多点IPLC/保证高端用户使用需求。

版权声明:

本文仅用于学习、研究和交流目的,欢迎非商业性质转载。本文链接:https://masuit.com/1770

l  文章内容仅供参考,所涉及的软件以具体使用情况为准!

l  博主在此发文(包括但不限于汉字、拼音、拉丁字母)均为随意敲击键盘所出,用于检验本人电脑键盘录入、屏幕显示的机械、光电性能,并不代表本人局部或全部同意、支持或者反对观点。如需要详查请直接与键盘生产厂商法人代表联系。挖井挑水无水表,不会网购无快递。

l  博主的文章没有高度、深度和广度,只是凑字数。由于博主的水平不高(其实是个菜B),不足和错误之处在所难免,希望大家能够批评指出。

l  博主是利用读书、参考、引用、抄袭、复制和粘贴等多种方式打造成自己的纯镀 24k 文章,请原谅博主成为一个无耻的文档搬运工!

l  文章内容部分来源于互联网,不代表本人的任何立场;涉及到的软件来源于互联网,仅供个人下载使用,请勿用于商业用途,版权归软件开发者所有,下载后请于24小时内删除,如有真实需要请支持正版!因下载本站任何资源造成的损失,全部责任由使用者本人承担!如果你是版权方,认为本文内容对您的权益有所侵犯,请联系本站管理员,并参照侵删联系的说明提交相应的证明材料,本站将进行严格地资质审查和背景调查,情况属实的将在三天内将本文删除或修正。

l  如遇资源报毒,请参阅:https://masuit.com/misc/14

相关推荐:

用C#实现求有向图的最长路径和最短路径 开源C# WPF控件库强力推荐
Resharper配合使用CodeMaid插件帮助你提高打码效率 ASP.NET Core MVC中的自动静态资源压缩中间件
通过Expression表达式树,为EF Core找回AddOrUpdate方法 IIS通过URL重写将www的域名301到不带www的域名和强制使用https访问网站
ASP.NET Core MVC/WebAPI中另辟蹊径的全局统一异常处理方式 一小时学会 C#6.0 的新特性
从.NET+25台服务器支撑世界第54大网站浅谈网站优化 asp.net即时通信框架——signalR起步

评论区: