ASP.NET Core 5.0中如何将旧.aspx页面重定向或路由到IIS托管的控制器操作
ASP.NET Core 5.0 旧.aspx路径重定向解决方案
推荐优先采用301永久重定向方案,对搜索引擎收录最友好,旧链接的权重会完全转移到新路径,适配你目前已有数千条旧.aspx收录的场景。
方案1:内置URL重写中间件(推荐)
无需安装额外依赖,ASP.NET Core 5.0 已内置重写中间件,配置步骤如下:
- 打开项目的
Startup.cs文件,在Configure方法的最开头(至少要在UseRouting、UseEndpoints等中间件之前)添加重写规则配置:
using Microsoft.AspNetCore.Rewrite; using System.Net; public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { var rewriteOptions = new RewriteOptions() // 通用规则1:匹配根目录下的 xxx.aspx ,重定向到 /xxx/index .AddRedirect(@"^(\w+)\.aspx$", "$1/index", (int)HttpStatusCode.MovedPermanently) // 通用规则2:匹配多级目录下的 xxx/xxx.aspx ,重定向到 /xxx/xxx/index .AddRedirect(@"^([\w/]+)\.aspx$", "$1/index", (int)HttpStatusCode.MovedPermanently) // 特殊规则:如果有个别路径不符合通用规则,单独加在通用规则前面即可 // 例如 .AddRedirect(@"^special-old\.aspx$", "/new/custom/path", 301) ; app.UseRewriter(rewriteOptions); // 下方保留你原本的其他中间件配置 app.UseRouting(); // ...其他中间件 app.UseEndpoints(endpoints => { // ...原本的路由配置 }); }
方案优势
- 自动保留原请求的查询参数,例如
quote.aspx?id=123会自动重定向到quote/index?id=123 - 301状态码会通知搜索引擎替换旧的收录链接,不会影响站点的SEO排名
- 规则支持正则,数千条不同的.aspx路径只要符合命名规则就不需要单独配置
方案2:路由直接映射(无需跳转,URL不变)
如果你不需要更新搜索引擎收录,希望用户访问旧.aspx路径时URL不变,直接返回对应控制器的内容,可以选择路由映射方案:
在Startup.cs的UseEndpoints配置中添加专属路由模板即可:
app.UseEndpoints(endpoints => { // 匹配所有.aspx路径,映射到对应控制器的Index方法 endpoints.MapControllerRoute( name: "aspxRoute", pattern: "{controller}.aspx", defaults: new { action = "Index" }); // 保留你原本的默认路由 endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); });
验证方法
配置完成后可以通过浏览器开发者工具的网络面板,或者curl命令查看响应,确认返回状态码为301,Location响应头为目标新路径即可。
内容的提问来源于stack exchange,提问作者JClarkCDS
相关产品推荐
相关产品推荐

