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

IIS跨域URL Rewrite失效问题(ASP.NET站点)

问题诊断与解决方案

核心问题

已部署ARR并规避IIS URL Rewrite常见错误,静态HTML站点的同域/跨域重写规则均正常生效,但带母版页的ASP.NET站点跨域重写失效:访问http://testsite1/About时,FRT日志显示URL先被重写至http://testsite2/About,随后又被还原为原URL,最终返回原站点内容。

原因分析

ASP.NET的UrlRoutingModule路由模块或母版页的页面生命周期逻辑,会在ARR重写操作之后的请求管道阶段,重新解析并修改请求URL,覆盖ARR的重写结果:

  • 带母版页的ASP.NET页面会触发路由解析、页面初始化等流程,若站点配置了Web Forms或MVC路由规则,路由模块会基于原请求上下文重置URL路径。
  • ARR重写默认发生在请求管道早期阶段(如PreBeginRequest),而ASP.NET路由模块在后续阶段(如PostResolveRequestCache)执行,导致重写结果被覆盖。

解决步骤

1. 调整ARR重写规则的执行顺序

确保跨域重写规则在ASP.NET路由模块之后执行:

  • 打开IIS管理器,进入testsite1的URL重写规则界面,选中目标跨域规则,点击右侧「上移」提升优先级(确保在所有ASP.NET路由规则之后)。
  • 或直接在web.config中修改规则的order属性,设置为更大数值:
<rule name="CrossDomainRewrite" stopProcessing="true" order="100">
  <match url="^About$" />
  <action type="Rewrite" url="http://testsite2/About" />
</rule>

2. 禁用不必要的ASP.NET路由模块

若testsite1无需路由功能,在web.config中移除路由模块:

<system.webServer>
  <modules>
    <remove name="UrlRoutingModule-4.0" />
  </modules>
</system.webServer>

3. 添加路由忽略规则(需保留路由时)

若必须保留站点路由,让目标路径跳过ASP.NET路由解析:
在Global.asax的Application_Start方法中添加:

protected void Application_Start(object sender, EventArgs e)
{
    // 忽略/About路径的路由解析
    RouteTable.Routes.IgnoreRoute("About");
    // 其他路由注册逻辑...
}

4. 检查ARR代理配置

确认ARR代理功能正确启用,避免反向代理的URL还原逻辑干扰:

  • 打开IIS管理器的「Application Request Routing Cache」面板,勾选「Enable proxy」。
  • 进入「Proxy Settings」,取消勾选「Reverse rewrite host in response headers」(无需修改响应头时),避免影响重写后的URL上下文。

5. 定位FRT日志中的重置模块

查看FRT日志中URL还原记录的ModuleName字段:

  • 若为UrlRoutingModule-4.0,对应上述路由模块问题;若为其他ASP.NET模块,需针对性调整该模块的执行顺序或配置。

内容的提问来源于stack exchange,提问作者Jey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 18:17:01