ASP.NET Core实现两类URL重定向:.xxx转.yyy及.com域名转.net
嘿,这就帮你搞定这两个URL重定向的需求,都是基于ASP.NET Core的URL重写中间件实现的,直接看代码和说明就行:
1. 实现.xxx后缀到.yyy后缀的请求重定向
我们可以通过检查请求路径的后缀,匹配到.xxx结尾的请求后,替换为.yyy后缀并完成重定向。以下是具体实现代码:
// 若使用ASP.NET Core 2.x,放在Startup.cs的Configure方法中 // 若使用ASP.NET Core 6+,放在Program.cs的管道配置段(app.UseRouting()之前) app.UseRewriter(new RewriteOptions().Add(ctx => { var req = ctx.HttpContext.Request; var path = req.Path.Value; // 不区分大小写检查路径是否以.xxx结尾 if (!string.IsNullOrEmpty(path) && path.EndsWith(".xxx", StringComparison.OrdinalIgnoreCase)) { // 替换后缀为.yyy var newPath = path.Substring(0, path.Length - 4) + ".yyy"; // 构建完整的新URL,保留协议、主机、查询字符串 var newUrl = $"{req.Scheme}://{req.Host}{newPath}{req.QueryString}"; // 执行301永久重定向(适合长期跳转,对SEO友好) // 若需临时重定向,将permanent改为false即可 ctx.HttpContext.Response.Redirect(newUrl, permanent: true); ctx.Result = RuleResult.EndResponse; // 终止后续中间件处理,避免多余操作 } }));
小提示:这里用了不区分大小写的匹配,能覆盖XXX、xXx等各种后缀大小写的情况,确保所有相关请求都能被正确处理。
2. 将.com域名请求重定向到.net域名(保留路径和路由)
参照你提供的移除www.的代码示例,我们只需要检查主机名的后缀,替换.com为.net,同时完整保留原请求的路径、查询字符串和路由规则,实现代码如下:
// 若使用ASP.NET Core 2.x,放在Startup.cs的Configure方法中 // 若使用ASP.NET Core 6+,放在Program.cs的管道配置段(app.UseRouting()之前) app.UseRewriter(new RewriteOptions().Add(ctx => { var req = ctx.HttpContext.Request; var hostName = req.Host.ToString(); // 不区分大小写检查主机名是否以.com结尾 if (hostName.EndsWith(".com", StringComparison.OrdinalIgnoreCase)) { // 替换.com后缀为.net var newHostName = hostName.Substring(0, hostName.Length - 4) + ".net"; // 构建新URL,完整保留原请求的协议、路径、查询字符串 var newUrl = $"{req.Scheme}://{newHostName}{req.Path}{req.QueryString}"; // 执行301永久重定向,临时重定向可改为permanent: false ctx.HttpContext.Response.Redirect(newUrl, permanent: true); ctx.Result = RuleResult.EndResponse; } }));
注意:这个方案会处理所有.com结尾的主机名,比如www.example.com会被重定向到www.example.net,api.example.com会转到api.example.net,完全保留原主机的前缀部分,同时路径(比如/products/1)和查询参数(比如?page=2)也会原封不动地保留下来。
内容的提问来源于stack exchange,提问作者mohamad javad Taherian
相关产品推荐
相关产品推荐

