雖然VisualStudio創(chuàng)建http://ASP.NET Core網(wǎng)站應(yīng)用的時(shí)候會(huì)有個(gè)【啟用https】的" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

18143453325 在線咨詢(xún) 在線咨詢(xún)
18143453325 在線咨詢(xún)
所在位置: 首頁(yè) > 營(yíng)銷(xiāo)資訊 > 建站知識(shí) > ASP.NET Core通過(guò)URL重寫(xiě)將www的域名301到不帶www的域名和強(qiáng)制使用https

ASP.NET Core通過(guò)URL重寫(xiě)將www的域名301到不帶www的域名和強(qiáng)制使用https

時(shí)間:2023-02-09 09:18:01 | 來(lái)源:建站知識(shí)

時(shí)間:2023-02-09 09:18:01 來(lái)源:建站知識(shí)

之前寫(xiě)過(guò)一篇IIS通過(guò)URL重寫(xiě)將www的域名301到不帶www的域名和強(qiáng)制使用https訪問(wèn)網(wǎng)站的文章,突然想到,ASP.NET Core的還沒(méi)寫(xiě),今天補(bǔ)上吧。

雖然VisualStudio創(chuàng)建http://ASP.NET Core網(wǎng)站應(yīng)用的時(shí)候會(huì)有個(gè)【啟用https】的選項(xiàng),但是,實(shí)際現(xiàn)象是,這選項(xiàng)似乎沒(méi)什么卵用,之前經(jīng)過(guò)大量的google和百度,也不好找到這方面的資料,于是只能考慮url重寫(xiě)的方式了,同樣,無(wú)論是出于安全還是搜索引擎優(yōu)化的原因,我們都希望網(wǎng)站在訪問(wèn)多個(gè)類(lèi)似的域名時(shí),最好能重定向到統(tǒng)一的域名,比如博主的網(wǎng)站可以通過(guò)以下這些地址來(lái)訪問(wèn):

http://www.masuit.com

http://masuit.com

https://www.masuit.com

https://masuit.com

但是,我并不希望訪問(wèn)上面這些不同url出現(xiàn)相同的頁(yè)面,這對(duì)SEO來(lái)說(shuō)也不友好,所以我們需要將上面這些地址都統(tǒng)一的永久重定向到https://masuit.com,那么怎么來(lái)實(shí)現(xiàn)呢?

當(dāng)然,你可以說(shuō)通過(guò)掛nginx、CDN、DNS等外部的方式實(shí)現(xiàn)URL重寫(xiě),這確實(shí)也是一種解決方案,但博主我就一窮逼,家境貧寒,買(mǎi)不起高配的服務(wù)器,買(mǎi)不起CDN,也買(mǎi)不起高級(jí)的DNS套餐,所以只能造輪子咯,自己動(dòng)手,豐衣足食!

窮逼就有窮逼的活法,當(dāng)然http://ASP.NET Core應(yīng)用程序也可以?huà)斓絀IS上,通過(guò)IIS進(jìn)行重寫(xiě),但基于性能考慮,還是直接dotnet命令行裸奔吧,通過(guò)寫(xiě)代碼的方式實(shí)現(xiàn)URL重定向。

代碼實(shí)現(xiàn)

http://ASP.NET Core為我們提供了內(nèi)置的URL重寫(xiě)中間件Rewriter,我們只需要寫(xiě)自己的規(guī)則就好了,創(chuàng)建一個(gè)NonWwwRule類(lèi),實(shí)現(xiàn)自IRule,并實(shí)現(xiàn)ApplyRule方法:

public class NonWwwRule : IRule { public void ApplyRule(RewriteContext context) { } }方法參數(shù)RewriteContext可從中獲取到當(dāng)前的請(qǐng)求路徑,以及HttpContext對(duì)象,便可以實(shí)現(xiàn)Redirect:

public class NonWwwRule : IRule { public void ApplyRule(RewriteContext context) { var req = context.HttpContext.Request; var currentHost = req.Host; // 如果是本地調(diào)試的時(shí)候,不進(jìn)行重寫(xiě) if (currentHost.Host.Equals("127.0.0.1") || currentHost.Host.Equals("localhost", StringComparison.InvariantCultureIgnoreCase)) { context.Result = RuleResult.ContinueRules; return; } // 如果scheme是http或者域名是www.的,進(jìn)行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寫(xiě)個(gè)擴(kuò)展方法,作用是將上面的規(guī)則添加到Rewriter中:

public static class RewriteOptionsExtensions { public static RewriteOptions AddRedirectToNonWww(this RewriteOptions options) { options.Rules.Add(new NonWwwRule()); return options; } }規(guī)則定義好以后,在Startup中進(jìn)行配置:

app.UseHttpsRedirection().UseRewriter(new RewriteOptions().AddRedirectToNonWww());現(xiàn)在,http://ASP.NET Core網(wǎng)站應(yīng)用的裸奔重寫(xiě)即實(shí)現(xiàn),相比IIS,其實(shí)簡(jiǎn)單太多了。

博客關(guān)聯(lián)代碼實(shí)現(xiàn):

轉(zhuǎn)自原文:



關(guān)鍵詞:強(qiáng)制,使用,通過(guò)

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉