1

サイトコア マルチサイト ソリューションで 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 設定で定義されている)、404 をスローしようとする base.RedirectOnItemNotFound を実行しています)。カスタム 404 ハンドラーが再び呼び出されるため、リダイレクト ループに陥ります。

そのため、誰かが 404 ページをサイトの 1 つに追加するのを忘れると、他のすべてのサイトが停止し、膠着状態になります。

私の質問は、サイトの 1 つに 404 ページがない場合、このシナリオを処理する最善の方法は何でしょうか?

base.Redirect..? の代わりに例外を再スローします。

乾杯

4

2 に答える 2

1

あなたのシナリオでは、すべてのサイトにグローバル 404 ページを用意することをお勧めします。

サイトに 404 ページがない場合は、そのグローバル ページのコンテンツを表示する必要があります。

Sitecore 構造でサイトを作成する場合、Branch Templates を使用して作成でき、すべてのサイトに 404 ページを追加できます。

また、すべてのサイトの 404 ページごとにセキュリティを修正できます。一部の特別な役割 (管理者) だけが 404 ページを削除します。

于 2013-09-11T03:17:06.650 に答える
0

サイト固有のエラー ページが設定されていない場合は、URL /sitecore/service/notfound.aspx を使用して基本的な Sitecore の notfound ページにリダイレクトするのが最善の方法だと思います。

これを行うより良い方法は、IIS マネージャー自体です。手順は次のとおりです。

  1. IIS マネージャーに移動し、左側のペインでサイトを選択し、[エラー ページ] モジュールを選択します。
  2. [404 エラー ページ] を選択し、[操作] ウィンドウで [編集] をクリックします。
  3. [URL の実行] を選択し、URL を /sitecore/service/notfound.aspx に指定します。
  4. 再度、[操作] ウィンドウで [機能設定の編集] をクリックし、[カスタム エラー ページ] に設定されていることを確認します。(あなたの場合、すでにカスタムエラーページがあるので、そうあるべきだと思います)

私の知る限り、これで問題は解決するはずです。

何が起こるか教えてください。IIS マネージャーでエラー ページを変更する方法を確認する必要がある場合は、私が以前に回答した同様の種類の質問を参照してください ( Sitecore - マルチサイト セットアップでサイトごとに個別に 500 エラーを処理する) 。

この入力がお役に立てば幸いです。

よろしく、 ヴァルン・シュリンガーピュア

于 2013-09-12T06:56:47.483 に答える