ASP.NET Core多域名重定向失效:Azure应用服务无法跳转至主域名
解决Azure App Service域名重定向失效问题
问题根源分析
AddRedirect方法使用错误:AddRedirect的第一个参数是匹配URL路径,而非请求的域名(HTTP_HOST),你写的正则^(www.)?domain2\.com永远不会匹配路径,因此规则不生效。- IIS重写XML规则的潜在问题:
- 规则中使用
http://协议,而Azure App Service默认强制HTTPS,可能导致重定向被浏览器忽略或拦截; - 若XML文件未设置为复制到输出目录,部署后无法读取,规则自然不生效;
- 规则顺序问题:
AddRedirectToWwwPermanent在重定向规则之后添加,可能先执行了WWW跳转,导致后续域名重定向规则未触发。
- 规则中使用
修正方案
方案1:使用自定义重写规则(推荐)
直接通过AddRule方法检查请求的HTTP_HOST,实现域名重定向,无需依赖外部XML:
app.UseRewriter(new RewriteOptions() // 先执行域名重定向,再处理WWW跳转 .AddRule(context => { var host = context.HttpContext.Request.Host.Host; var path = context.HttpContext.Request.Path; var isDomain2 = host.Equals("domain2.com", StringComparison.OrdinalIgnoreCase) || host.Equals("www.domain2.com", StringComparison.OrdinalIgnoreCase); var isDomain3 = host.Equals("domain3.com", StringComparison.OrdinalIgnoreCase) || host.Equals("www.domain3.com", StringComparison.OrdinalIgnoreCase); if (isDomain2 || isDomain3) { var newUrl = $"https://www.domain1.com{path}{context.HttpContext.Request.QueryString}"; context.HttpContext.Response.Redirect(newUrl, permanent: true); return RuleResult.SkipRemainingRules; } return RuleResult.ContinueRules; }) .AddRedirectToWwwPermanent("domain1.com") );
方案2:修复IIS重写XML规则
- 修改XML内容:将协议改为
https://,添加忽略大小写配置,同时兼容本地测试的端口场景:
<rewrite> <rules> <rule name="redirectDomain" stopProcessing="true"> <match url="(.*)" /> <action type="Redirect" url="https://www.domain1.com/{R:1}" redirectType="Permanent" /> <conditions logicalGrouping="MatchAny"> <add input="{HTTP_HOST}" pattern="^(www\.)?domain2\.com$" ignoreCase="true" /> <add input="{HTTP_HOST}" pattern="^(www\.)?domain3\.com$" ignoreCase="true" /> <!-- 本地测试规则,兼容带端口的localhost访问 --> <add input="{HTTP_HOST}" pattern="^localhost(:\d+)?$" ignoreCase="true" /> </conditions> </rule> </rules> </rewrite>
- 设置文件属性:右键XML文件 → 属性 → 复制到输出目录,选择如果较新则复制或始终复制,确保部署到Azure时文件存在。
- 调整规则顺序:将
AddIISUrlRewrite放在AddRedirectToWwwPermanent之前,避免WWW跳转优先执行:
using (StreamReader iisUrlRewriteStreamReader = File.OpenText("IISUrlRewrite.xml")) { app.UseRewriter(new RewriteOptions() .AddIISUrlRewrite(iisUrlRewriteStreamReader) .AddRedirectToWwwPermanent("domain1.com") ); }
方案3:直接使用Azure App Service的重定向规则(无需代码)
在Azure门户中配置,无需修改代码:
- 进入你的App Service → 左侧菜单选择配置 → 重定向
- 开启重定向,添加规则:
- 源:
domain2.com/*、www.domain2.com/*、domain3.com/*、www.domain3.com/* - 目标:
https://www.domain1.com/{R:1} - 类型:永久(301)
- 源:
- 保存配置,Azure会自动应用重定向规则。
本地测试注意事项
本地测试时,修改hosts文件(Windows路径:C:\Windows\System32\drivers\etc\hosts;Linux/macOS路径:/etc/hosts),添加:
127.0.0.1 domain2.com 127.0.0.1 domain3.com
然后访问http://domain2.com:端口号,即可测试重定向是否生效。
内容的提问来源于stack exchange,提问作者Andreas Lämmerhofer
相关产品推荐
相关产品推荐

