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

ASP.NET Core多域名重定向失效:Azure应用服务无法跳转至主域名

解决Azure App Service域名重定向失效问题

问题根源分析

  1. AddRedirect方法使用错误:AddRedirect的第一个参数是匹配URL路径,而非请求的域名(HTTP_HOST),你写的正则^(www.)?domain2\.com永远不会匹配路径,因此规则不生效。
  2. 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规则

  1. 修改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>
  1. 设置文件属性:右键XML文件 → 属性 → 复制到输出目录,选择如果较新则复制或始终复制,确保部署到Azure时文件存在。
  2. 调整规则顺序:将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 19:45:25