2

我想将 Sitecore 项目用作 404 页面,以便为不同的站点翻译 404 和单独的 404 页面。我创建了一个名为 Render404 的子布局,其中唯一的代码是在响应中设置 HTTP 状态代码,如下所示:

    protected void Page_Load(object sender, EventArgs e)
    {
        this.Response.StatusCode = 404;  //gotta set our HTTP response code, otherwise this rendering does nothing
    }

我创建了一个测试 404 页面并放入此渲染中。在我的浏览器中加载页面。效果很好,得到预期的 404 代码。

然后我把它推到了现场。失败得很惨。当我尝试直接访问我的测试 404 时,Sitecore 不断地为我提供默认的 ItemNotFoundUrl 页面。真正奇怪的是它在预览中运行良好,这让我认为这是一个发布问题。但事实并非如此。这些项目在 Web DB 中显示良好。此外,如果我删除 404 控件,页面呈现正常并且没有重定向。Sitecore 在某处看到 404 状态并进行重定向。即使有一个上下文项。而且这种行为不会发生在我的开发系统中。

建议?

更多信息:我已经尝试过使用 ServerSideRedirect true/false。不会改变任何东西。

4

2 回答 2

4

你能试试吗:

Response.TrySkipIisCustomErrors = true;
Response.StatusCode = 404;
Response.StatusDescription = "Page not found";
Response.Flush();

TrySkipIisCustomErrors仅当您的应用程序托管在 IIS 7.0 中时才使用该属性。在 IIS 7.0 中以经典模式运行时,TrySkipIisCustomErrors属性默认值为true. 在集成模式下运行时,TrySkipIisCustomErrors属性默认值为false.

于 2013-07-09T04:04:09.177 回答
1

这似乎是Response.TrySkipIisCustomErrors其他回复中提到的。但无论如何,我建议您使用来自 Marketplace 的Sitecore Error Manager共享源模块。它完全符合您的要求。如果您不想添加模块,您可以查看Github上的源代码,我们是如何在那里解决问题的。

于 2013-07-09T06:23:33.047 回答