本地IIS中URL Rewrite Module失效,访问API报404求助
IIS URL Rewrite规则失效排查与解决(Angular+ASP.NET 6部署场景)
问题核心
本地/EC2部署Angular+ASP.NET 6 Web API,已确认URL Rewrite Module 2.1启用,API直接通过端口访问正常,但Angular访问/api路径时返回404;单独配置API重写规则到外部地址仍失效,但改为Redirect可正常跳转。
关键原因分析
Redirect是客户端跳转,无需服务器内部转发;而Rewrite(反向代理)依赖Application Request Routing (ARR) 模块——URL Rewrite本身不具备跨站点/端口转发能力,必须搭配ARR启用反向代理功能,这是绝大多数人忽略的配置细节。
修复步骤
1. 安装并启用ARR模块
- 下载并安装Application Request Routing(可通过IIS管理器的「管理模块」或官方渠道获取)
- 打开IIS管理器,右键服务器节点 → Application Request Routing Cache → Server Proxy Settings
- 勾选Enable proxy,保存配置
2. 调整Rewrite规则顺序
将API代理规则放在Angular路由规则之前,避免Angular的全匹配规则优先拦截请求:
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <rewrite> <rules> <!-- 优先处理API代理 --> <rule name="ApiProxyRule" stopProcessing="true"> <match url="api/(.*)" /> <action type="Rewrite" url="http://localhost:5004/api/{R:1}" /> <!-- EC2部署时,目标地址需改为API的内部IP/端口或公网可访问地址 --> </rule> <!-- Angular路由重写 --> <rule name="Angular Routes" stopProcessing="true"> <match url=".*" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> <add input="{REQUEST_URI}" pattern="^/(api)" negate="true" /> </conditions> <action type="Rewrite" url="./index.html" /> </rule> </rules> </rewrite> </system.webServer> </configuration>
3. 额外验证点
- 权限检查:确保IIS应用程序池身份(如AppPoolIdentity)有权访问目标API地址,本地测试时关闭端口防火墙限制
- 日志排查:启用IIS站点日志,查看
REWRITE_MODULE的执行记录,确认规则是否被命中 - CORS配置:如果目标API部署在不同域名/端口,需在ASP.NET 6中配置允许IIS站点的域名/IP访问
验证方法
- 重启IIS站点后,访问
http://localhost/api/user/test,检查是否正常转发到目标API - 查看IIS日志,确认请求被Rewrite模块处理并转发
内容的提问来源于stack exchange,提问作者Gooby200
相关产品推荐
相关产品推荐

