1

我正在使用以下实现来处理 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..?

干杯

4

2 回答 2

1

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

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

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

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

于 2013-09-11T03:17:06.650 回答
0

我认为如果未设置站点特定的错误页面,最好的办法是将其重定向到基本的 Sitecore notfound 页面,网址为 /sitecore/service/notfound.aspx

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

  1. 转到 IIS 管理器,在左侧窗格中选择站点,然后选择错误页面模块。
  2. 选择 404 错误页面,单击操作窗格中的编辑。
  3. 选择执行 URL 并将 URL 指定为 /sitecore/service/notfound.aspx
  4. 同样,在操作窗格中,单击编辑功能设置,并确保将其设置为自定义错误页面。(我认为应该是,因为在您的情况下,您已经有自定义错误页面)

据我所知,这应该可以解决您的问题。

请让我知道会发生什么。如果您需要查看如何更改 IIS 管理器中的错误页面,请参考我之前回答过的类似问题(Sitecore - 在多站点设置中每个站点分别处理 500 个错误

希望这个输入可以帮助你!

问候, Varun Shringarpure

于 2013-09-12T06:56:47.483 回答