本文共 2522 字,大约阅读时间需要 8 分钟。
路由跟URL 重写的功能性略有不同。路由是将Request 找到对应的服务,而URL 重写是为了推卸责任转送Request。
URL Rewriting Middleware需要Microsoft.AspNetCore.Rewrite
套件。
Microsoft.AspNetCore.All
,已经包含Microsoft.AspNetCore.Rewrite
,所以不用再安装。 要使用URL重写,在Startup.cs的Configure
对IApplicationBuilder
使用UseRewriter
方法注册URL Rewriting Middleware:
Startup.cs
// ...public class Startup{ public void Configure(IApplicationBuilder app) { var rewrite = new RewriteOptions() .AddRewrite("about.aspx", "home/about", skipRemainingRules: true) .AddRedirect("first", "home/index"); app.UseRewriter(rewrite); // ... }}
通过RewriteOptions
建立URL重写规则后,传入给URL Rewriting Middleware。
URL重写规则,主要有分两种方式:
AddRewrite
就是URL重写。 AddRedirect
就是URL转址。 URL 重写是属于Server 端的转换事件,当Client 端Request 来的时候,发现原网址已经被换掉了,就会自动回传新网址的内容。情境如下:
上例AddRewrite
有用到三个参数,当URL符合参数1时,就将参数2路由的内容回传给Client。
skipRemainingRules
设为true,当找到匹配条件,就不再继续往下找符合其他参数1的规则。 范例结果:
URL 转址是属于Client 端的转换事件,当Client 端Request 来的时候,发现原网址已经被换掉了,Server 会先回传给Client 告知新网址,再由Client 重新Request 新网址。情境如下:
AddRedirect
的使用方式类似AddRewrite
,当URL符合参数1时,就会回传参数2的URL给Client。
URL转址预设都是回传HTTP Status Code 302,也可以在参数3指定回传的HTTP Status Code。
通常转址的HTTP Status Code都是用301或302 ,URL转址对“人”的行为来说没有什么意义,反正就是帮忙从A转到B;主要差异是给“搜索引擎”理解的。Startup.cs
// ...public class Startup{ public void Configure(IApplicationBuilder app) { var rewrite = new RewriteOptions() .AddRedirect("first", "home/index", 301); app.UseRewriter(rewrite); // ... }}
301是要让搜索引擎知道,该网址已经永久转移到另一个地方。通常用于网站搬家或网站改版,新旧版本路径不相同,要重新对应的情况。
范例结果:
302是告知搜索引擎,虽然这次被转址,但只是暂时性的。通常用于网站维护时,暂时原网址转移到别的地方,如维护公告页面。
范例结果:
AddRewrite
及AddRedirect
都支持正则表达式的使用,且能把来源的URL通过正则表达式变成参数,带入新URL。
Startup.cs
// ...public class Startup{ public void Configure(IApplicationBuilder app) { var rewrite = new RewriteOptions() .AddRedirect(@"products.aspx?id=(\w+)", "prosucts/$1", 301) .AddRedirect(@"api/(.*)/(.*)/(.*)", "api?p1=$1&p2=$2&p3=$3", 301); app.UseRewriter(rewrite); // ... }}
http://localhost:5000/products.aspx?id=p123
转址到http://localhost:5000/products/p123
http://localhost:5000/api/first/second/third
转址到http://localhost:5000/api?p1=first&p2=second&p3=third
通过正则表达式做URL 转址,对于网站新旧改版来说,非常好用。
老司机发车啦:
转载地址:http://gpwza.baihongyu.com/