You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:30:55