YARP子应用路径修改:根域名跳转至Login路径的配置问题
问题分析
你当前遇到两个核心问题:一是根域名www.site.com访问时,被后端.NET Framework应用带偏到www.site.com/subapplication/Login,而非预期的www.site.com/Login;二是现有appsettings.json的Transforms数组存在语法错误(两个配置对象间缺少逗号),导致部分转换规则未生效。
解决方案
1. 先修复配置语法错误
修正Transforms数组的逗号缺失问题,否则配置无法正常加载:
"ReverseProxy": { "Routes": { "fallbackRoute": { "ClusterId": "fallbackCluster", "Order": "1", "Match": { "Path": "{**catch-all}" }, "Transforms": [ { "PathRemovePrefix": "/web" }, { "RequestHeaderOriginalHost": "true" } ] } }, "Clusters": { "fallbackCluster": { "Destinations": { "fallbackApp": { "Address": "https://dansaleswebdev.danone.com.br/dev/web/" } } } } }
2. 添加根路径重定向路由
新增优先级更高的路由,直接将根域名访问重定向到/Login,让浏览器地址栏直接显示目标路径:
"ReverseProxy": { "Routes": { "rootRedirect": { "Order": "0", // 优先级高于fallbackRoute,优先匹配 "Match": { "Path": "/" }, "Redirect": { "Destination": "/Login", "StatusCode": 301 // 用302可改为临时重定向 } }, "fallbackRoute": { // 保留原fallbackRoute配置 "ClusterId": "fallbackCluster", "Order": "1", "Match": { "Path": "{**catch-all}" }, "Transforms": [ { "PathRemovePrefix": "/web" }, { "RequestHeaderOriginalHost": "true" } ] } }, "Clusters": { "fallbackCluster": { "Destinations": { "fallbackApp": { "Address": "https://dansaleswebdev.danone.com.br/dev/web/" } } } } }
3. 处理后端返回的重定向响应
后端.NET Framework应用可能会返回带/subapplication的重定向头,需要让YARP修改该响应头,确保浏览器地址栏显示正确路径。在fallbackRoute的Transforms中添加响应头替换规则:
"Transforms": [ { "PathRemovePrefix": "/web" }, { "RequestHeaderOriginalHost": "true" }, { "ResponseHeader": { "Name": "Location", "Pattern": "^(.*)/subapplication(.*)$", "Replacement": "$1$2" } } ]
该规则会把响应头Location中的/subapplication字符串移除,比如后端返回https://www.site.com/subapplication/Login,会被修正为https://www.site.com/Login。
验证步骤
- 保存修改后的
appsettings.json - 重启IIS站点或YARP应用
- 访问
www.site.com,确认直接跳转到www.site.com/Login且地址栏显示正确 - 访问
www.site.com/Login,确认仍可正常访问子应用
内容的提问来源于stack exchange,提问作者Gustavo Mauricio De Barros
相关产品推荐
相关产品推荐

