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

IIS Rewrite规则配置问题:Angular与.NET 8 API共存异常

IIS重写规则配置:Angular与.NET API共存方案

问题背景

在IIS上托管Angular应用和.NET 8 Web API,API以别名dotnet作为子应用挂载。需要实现:

  • 所有domain.com/dotnet/*路径的请求直接路由到API
  • 其余请求重写到./index.html,解决Angular页面刷新时的404问题

当前异常:访问domain.com/dotnet/someRequest时,请求被错误重定向到Angular应用,无法获取API返回的JSON数据。

已尝试配置的问题分析

  1. 第一种配置:错误使用{QUERY_STRING}判断dotnet路径,但dotnet是URL路径而非查询参数,导致规则无法匹配API请求,所有非文件/目录请求都被重写到index.html。
  2. 第二种配置:正则表达式.*/dotnet/*匹配逻辑错误,且action中未正确使用{UNENCODED_URL}变量,同时不需要对API请求做重写操作,直接放行即可。

正确的重写规则配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <!-- 放行所有dotnet开头的API请求,直接路由到子应用 -->
                <rule name="Pass Through to .NET API" stopProcessing="true">
                    <match url="^dotnet(/.*)?$" />
                    <action type="None" />
                </rule>
                <!-- Angular路由重写:仅当请求不是实际文件/目录时,重写到index.html -->
                <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" />
                    </conditions>
                    <action type="Rewrite" url="./index.html" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

配置逻辑说明

  1. API放行规则:

    • 正则^dotnet(/.*)?$精准匹配所有以dotnet开头的路径(包括/dotnet根路径和所有子路径)
    • action type="None"表示不对请求做任何修改,直接让IIS路由到dotnet子应用
    • stopProcessing="true"确保该规则匹配后,不再执行后续的Angular路由规则
  2. Angular路由规则:

    • 匹配所有URL路径,仅当请求的路径不是服务器上实际存在的文件或目录时,才重写到index.html,确保Angular的前端路由能正常工作,解决刷新页面的404问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 11:57:05