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

请求指导:配置Epi将无效URL重定向至首页

在Episerver中配置无效URL重定向至首页的解决方案

Episerver确实没有内置将所有404请求自动重定向到首页的功能,但可以通过自定义错误处理逻辑实现需求,以下是针对多站点场景的具体方案:

核心实现思路

捕获404状态码的请求,通过Episerver的站点定义服务获取当前请求对应站点的首页ContentReference,再解析为URL后执行重定向。

具体实现步骤

1. 确保站点配置正确

在Episerver后台的站点管理中,为每个站点指定好「起始页面」(Start Page),这是后续获取首页URL的基础。

2. 自定义404重定向逻辑

根据你使用的.NET版本(Framework/Core),选择对应的实现方式:

针对.NET Framework的Episerver

在Global.asax.cs中重写Application_Error方法,拦截404错误并处理:

protected void Application_Error(object sender, EventArgs e)
{
    var exception = Server.GetLastError();
    var httpException = exception as HttpException;

    if (httpException?.GetHttpCode() == 404)
    {
        Server.ClearError();
        
        // 获取当前站点的首页引用
        var siteDefinition = SiteDefinition.Current;
        var homePageRef = siteDefinition.StartPage;
        
        if (!ContentReference.IsNullOrEmpty(homePageRef))
        {
            var urlResolver = ServiceLocator.Current.GetInstance<UrlResolver>();
            var homeUrl = urlResolver.GetUrl(homePageRef);
            
            // 执行重定向(默认302临时重定向,如需301可修改Response.StatusCode)
            Response.Redirect(homeUrl, true);
        }
    }
}

针对.NET Core的Episerver

创建自定义中间件来处理404请求:

public class Custom404RedirectMiddleware
{
    private readonly RequestDelegate _next;

    public Custom404RedirectMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task InvokeAsync(HttpContext context, ISiteDefinitionResolver siteResolver, IUrlResolver urlResolver)
    {
        await _next(context);

        // 仅处理未响应的404请求
        if (context.Response.StatusCode == 404 && !context.Response.HasStarted)
        {
            var siteDefinition = siteResolver.GetDefinitionForContent(context.Request.Path);
            var homePageRef = siteDefinition.StartPage;
            
            if (!ContentReference.IsNullOrEmpty(homePageRef))
            {
                var homeUrl = urlResolver.GetUrl(homePageRef);
                context.Response.Redirect(homeUrl);
            }
        }
    }
}

然后在Startup.cs的Configure方法中注册中间件:

public void Configure(IApplicationBuilder app)
{
    // 确保此中间件在其他错误处理中间件之后注册
    app.UseMiddleware<Custom404RedirectMiddleware>();
}

3. 可选优化:排除静态资源的404重定向

如果不需要将不存在的CSS/JS/图片等静态资源重定向到首页,可以在逻辑中添加判断,仅针对页面请求处理:

// 示例:排除常见静态资源后缀
var staticExtensions = new[] { ".css", ".js", ".png", ".jpg", ".gif" };
var requestPath = context.Request.Path.ToString();
if (!staticExtensions.Any(ext => requestPath.EndsWith(ext, StringComparison.OrdinalIgnoreCase)))
{
    // 执行重定向逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 06:03:24