.NET Core 5如何将www域名重定向到非www?内置方法不生效如何解决?
非www重定向不生效的问题修复方案
核心问题点
- 重写规则仅注册在非开发环境的
else分支中,如果你在开发环境下调试,这段代码根本不会执行,自然不会触发重定向。 - 内置无参
AddRedirectToNonWww()方法默认仅适配顶级域名场景,对子域名场景默认不生效。 - 中间件顺序错误:
UseRewriter必须放在UseStaticFiles、UseRouting等处理请求的中间件之前,否则请求会被前置中间件直接响应,不会进入重写逻辑。
修复代码
无需自定义重写逻辑,使用.NET 5+ 内置的带参数重载即可适配子域名场景,同时调整中间件顺序:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // 重写中间件放在请求处理流程最前端 if (!env.IsDevelopment()) { app.UseRewriter(new RewriteOptions() // 第一个参数为301永久重定向状态码,第二个参数为你的主域名 .AddRedirectToNonWww(301, "your-domain.com") ); } if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Error"); app.UseHsts(); } // 其他中间件全部放在重写规则之后 app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); }); }
注意事项
- 若你使用的是.NET Core 3.1及更低版本,无参
AddRedirectToNonWww不支持子域名处理,升级到.NET 5+即可使用带域名参数的官方重载。 - 测试前请清除浏览器缓存,301永久重定向会被浏览器长期缓存,硬刷新或者开启浏览器无痕模式测试可以避免缓存干扰。
内容的提问来源于stack exchange,提问作者Davood
相关产品推荐
相关产品推荐

