为什么Sitecore会将我的404项目劫持到ItemNotFoundUrl?

时间:2013-07-09 01:07:46

标签: http-status-code-404 sitecore sitecore6

我想将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。不会改变任何东西。

2 个答案:

答案 0 :(得分:4)

你可以试试吗:

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

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

答案 1 :(得分:1)

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