Sitecore自定义404重定向

Sitecore自定义404重定向,sitecore,Sitecore,我使用以下实现在sitecore多站点解决方案中处理404: 在ExecuteRequest管道的自定义实现中 protected override void RedirectOnItemNotFound(string url) { var context = HttpContext.Current; try { // Request the NotFound page

我使用以下实现在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


干杯

在您的场景中,我建议您为所有站点设置一个全局404页面

如果站点404页面上没有内容,则必须显示该全局页面的内容

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


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

在您的场景中,我建议您为所有站点设置一个全局404页面

如果站点404页面上没有内容,则必须显示该全局页面的内容

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


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

我认为如果未设置站点特定的错误页面,最好将其重定向到基本的Sitecore notfound页面,带有url/Sitecore/service/notfound.aspx

这样做的更好之处在于IIS管理器本身。 步骤如下:

  • 转到IIS管理器,在左侧窗格中选择站点,然后选择错误页面模块
  • 选择404错误页面,单击操作窗格中的编辑
  • 选择ExecuteURL并将URL指定为/sitecore/service/notfound.aspx
  • 同样,在“操作”窗格中,单击“编辑功能设置”,并确保将其设置为“自定义错误页”。(我认为应该是这样,就像您已经有自定义错误页一样)
  • 据我所知,这应该能解决你的问题

    一定要让我知道发生了什么。 如果您需要了解如何在IIS管理器中更改错误页面,请参阅我不久前回答的类似问题()

    希望此输入对您有所帮助

    问候,,
    Varun Shringarpure

    我认为,如果没有设置站点特定的错误页面,最好将其重定向到基本的Sitecore notfound页面,并使用url/Sitecore/service/notfound.aspx

    这样做的更好之处在于IIS管理器本身。 步骤如下:

  • 转到IIS管理器,在左侧窗格中选择站点,然后选择错误页面模块
  • 选择404错误页面,单击操作窗格中的编辑
  • 选择ExecuteURL并将URL指定为/sitecore/service/notfound.aspx
  • 同样,在“操作”窗格中,单击“编辑功能设置”,并确保将其设置为“自定义错误页”。(我认为应该是这样,就像您已经有自定义错误页一样)
  • 据我所知,这应该能解决你的问题

    一定要让我知道发生了什么。 如果您需要了解如何在IIS管理器中更改错误页面,请参阅我不久前回答的类似问题()

    希望此输入对您有所帮助

    问候,,
    Varun Shringarpure

    假设我们不能出于一个很好的理由去寻找一个全局404页面。在这种情况下,我想知道什么是最好的方法,可以让它在不进入重定向循环的情况下优雅地失败。另外,如果你有任何建议,请重新改进我从上面几篇不同的博客文章中获得的修补解决方案,那将是非常好的。我这是Sitecore的一个很好的错误管理器,你可以在这里查看谢谢,但我真的在寻找一个关于我的场景的具体答案。你能告诉我你的httprequestbegin处理器是如何查看的吗?404页面的处理器定义必须在项目解析器之后,或者如果你正在使用一些重定向(301用于exemaple)在处理器定义后进行重定向。假设我们有一个很好的理由不能使用全局404页面。在这种情况下,我想知道在不进入重定向循环的情况下使其正常失败的最佳方法是什么。此外,如果您有任何建议,请重新改进我从几篇不同的博客文章中获得的修补解决方案我相信那太好了。这是一个很好的Sitecore错误管理器,你可以看看这里。谢谢,但我真的在寻找一个关于我的场景的具体答案。你能告诉我你的httprequestbegin处理器的外观吗。你的404页面的处理器定义必须在项目解析器之后,或者如果你正在使用一些重定向(301用于exemaple)要在处理器定义之后进行重定向。