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

将Azure网站基础URL重定向至自定义域名的技术求助

解决Azure Linux Web App会话过期重定向到azurewebsites域名的问题

1. 先配置ForwardedHeaders中间件(核心)

Azure Linux Web App本质是反向代理,它会把真实请求的主机、协议等信息放在X-Forwarded-Host、X-Forwarded-Proto这些请求头里,但.NET Core默认不会信任这些头,导致应用拿到的是内部的azurewebsites.net域名——这就是会话过期时跳错域名的根源。

在Program.cs里加这段配置,让应用识别真实的外部请求主机:

var builder = WebApplication.CreateBuilder(args);

// 配置ForwardedHeaders,信任反向代理的请求头
builder.Services.Configure<ForwardedHeadersOptions>(options =>
{
    options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto | ForwardedHeaders.XForwardedHost;
    // 生产环境建议指定Azure的代理IP段,这里先清空默认限制简化配置
    options.KnownProxies.Clear();
    options.KnownNetworks.Clear();
    options.ForwardLimit = null;
});

// 你的其他服务配置(比如AddControllers、AddAuthentication之类的)
// ...

var app = builder.Build();

// 注意:这个中间件必须放在所有其他中间件之前
app.UseForwardedHeaders();

// 后续的中间件配置(UseRouting、UseAuthentication等)
// ...

2. 修正重定向中间件,避免循环+保留原路径

如果还有个别场景跳转到azure域名,就加这段修正后的中间件。它只会在请求直接访问azurewebsites域名时重定向,还会保留原请求的路径和参数,同时避免重定向循环:

app.Use(async (context, next) =>
{
    var hostName = context.Request.Host.Host;
    // 只处理直接访问azurewebsites的请求,避免反向代理场景下的循环
    if (hostName.Contains("azurewebsites.net") && !context.Request.Headers.ContainsKey("X-Forwarded-Host"))
    {
        var redirectUrl = $"https://你的自定义域名{context.Request.Path}{context.Request.QueryString}";
        context.Response.Redirect(redirectUrl, permanent: true);
        return;
    }
    await next();
});

记得把你的自定义域名换成你实际用的域名,比如example.com。

3. 检查身份验证配置(如果用了Cookie认证)

如果你的应用用了ASP.NET Core的Cookie认证,别在配置里硬编码azurewebsites.net的地址,还可以强制登录重定向用自定义域名:

builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
    {
        // 登录路径用相对路径,别写绝对URL
        options.LoginPath = "/Account/Login";
        // 如果有子域名需求,设置Cookie.Domain为根域名,比如".example.com"
        // options.Cookie.Domain = ".example.com";
        // 强制重定向到登录页时用自定义域名
        options.Events = new CookieAuthenticationEvents
        {
            OnRedirectToLogin = context =>
            {
                context.RedirectUri = $"https://你的自定义域名{context.RedirectUri}";
                return Task.CompletedTask;
            }
        };
    });

验证方法

部署修改后的代码,等会话过期触发登录重定向,看看跳转的URL是不是你的自定义域名就好了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 00:38:21