Sitecore自定义404重定向

时间:2013-09-11 02:43:18

标签: sitecore

我正在使用以下实现来处理sitecore多站点解决方案中的404:

在ExecuteRequest管道的自定义实现中,

protected override void RedirectOnItemNotFound(string url)
        {
            var context = HttpContext.Current;

            try
            {
                // Request the NotFound page
                var domain = context.Request.Url.GetComponents(
                    UriComponents.Scheme | UriComponents.Host,
                    UriFormat.Unescaped);

                string content;

                using(var webClient = new WebClient())
                {
                    content = webClient
                        .DownloadString(string.Concat(domain, url));
                }

                // The line below is required for IIS 7.5 hosted 
                // sites or else IIS is gonna display default 404 page
                context.Response.TrySkipIisCustomErrors = true;
                context.Response.StatusCode = 404;
                context.Response.Write(content);
            }
            catch (Exception ex)
            {
                Log.Error(string.Format("Failed on URL: {0}. Falling back to default redirection behaviour. Reason for error {1}", url, ex), ex);

                // Fall back to default behavior on exceptions
                base.RedirectOnItemNotFound(url);
            }

            context.Response.End();
        }

现在您可以看到,如果找不到404页面(即没有404页面(在站点的web.config中Sitecore的ItemNotFound设置中定义),那么我正在做base.RedirectOnItemNotFound,它试图有效地抛出404再次回到我的自定义404处理程序,因此它落入重定向循环。

因此,如果有人忘记将404页面添加到其中一个网站,那么它会导致所有其他网站崩溃并陷入僵局。

我的问题是,在其中一个网站没有404页面的情况下,处理这种情况的最佳方法是什么?

重新抛出异常而不是base.Redirect ..?

干杯

2 个答案:

答案 0 :(得分:1)

在您的方案中,我建议您为所有网站提供全球404页面。

如果您没有网站404页面,则必须显示该全局页面中的内容。

在Sitecore结构上创建网站时,您可以使用分支模板创建,并且可以为所有网站添加404页面。

此外,您还可以修复所有网站的每404页的安全性。只是一些特殊角色(管理员)将删除404页面。

答案 1 :(得分:0)

我想如果没有设置网站特定的错误页面,最好的方法是将其重定向到基本的Sitecore notfound页面,使用url /sitecore/service/notfound.aspx

更好的做法是在IIS管理器本身。 步骤如下:

  1. 转到IIS管理器,在左窗格中选择站点,选择错误页面模块。
  2. 选择“404错误”页面,单击“操作”窗格中的“编辑”。
  3. 选择执行网址并指定网址为/sitecore/service/notfound.aspx
  4. 再次,在“操作”窗格中,单击“编辑功能设置”,并确保将其设置为“自定义错误”页面。 (我认为它应该是,因为在你的情况下你已经有自定义错误页面)
  5. 据我所知,这可以解决您的问题。

    让我知道会发生什么。 如果您需要查看如何对IIS管理器中的错误页面进行更改,请参阅我回答过的类似问题(Sitecore - Handle 500 errors separately per site in multisite setup

    希望此输入可以帮助您!

    此致 Varun Shringarpure

相关问题