使用RewriteOptions给URL添加末尾斜杠后,IIS发布出现重定向错误
解决IIS上RewriteOptions添加末尾斜杠导致的重定向循环问题
问题原因
你当前的正则规则(.*[^/])$会匹配所有不以斜杠结尾的URL,包括静态资源(如.css、.js文件)和路由已处理的路径。当重定向到带斜杠的URL后,ASP.NET Core路由或IIS默认处理可能会将/page/解析回/page,触发重复重定向,最终导致循环错误。此外,重定向顺序(先加斜杠再转HTTPS)也可能加剧问题。
解决方案
方案1:优化Rewrite规则,避免静态资源和循环
调整正则表达式排除带扩展名的静态文件,并调换重定向顺序(先转HTTPS再加斜杠):
var options = new RewriteOptions() .AddRedirectToHttpsPermanent() // 优先处理HTTPS重定向 // 匹配不以斜杠、也不以点结尾的URL(排除静态文件) .AddRedirect(@"^(.*[^/.])$", "$1/"); app.UseRewriter(options);
方案2:用路由配置强制末尾斜杠(更推荐)
放弃RewriteOptions,直接通过路由规则定义末尾斜杠,配合HTTPS重定向:
app.UseHttpsRedirection(); // 先强制HTTPS app.UseRouting(); app.UseEndpoints(endpoints => { // 路由模式末尾添加斜杠 endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}/"); });
这种方式与ASP.NET Core路由系统原生兼容,不会出现重定向冲突。
额外检查
- 确认IIS站点的
web.config中没有其他URL重写规则,避免和ASP.NET Core的规则冲突 - 检查是否开启了IIS的
Directory Browsing,确保目录请求的斜杠处理正常
内容的提问来源于stack exchange,提问作者Navid As
相关产品推荐
相关产品推荐

