3

私は Stackoverflow から次のコードを拾いました->Sitecore でカスタム 404 を処理しているブログ (実際には、Google によってソフト 404 としてピックアップされるステータス 200 で 302 リダイレクトを 404 ページに行います)。

これはローカルのテストサーバーではまったく問題なく動作しますが、本番環境にドロップすると、サイトが混乱し、ロードなどに 8 ~ 9 分かかるなど、AGES がかかります。

public class ExecuteRequest : Sitecore.Pipelines.HttpRequest.ExecuteRequest
{
    protected override void RedirectOnItemNotFound(string url)
    {
        var context = System.Web.HttpContext.Current;

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

            var content = WebUtil.ExecuteWebPage(
                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("Falling back to default redirection behavior. Reason for error {0}", ex), ex);

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

        context.Response.End();
    }
} 

PS: 次に、ExecuteRequest を web.config 内のカスタムのものに置き換えました。

同様のことを経験したことがある場合、またはこれに関する問題を知っている場合は、いくつかの光を当ててください.

前もって感謝します

4

4 に答える 4

6

Sitecore には、302 リダイレクトを取り除くことができる設定があります。

<setting name="RequestErrors.UseServerSideRedirect" value="true" />

この設定では、URL は同じままで、ステータス コードは 404 です。追加のロジック (Sitecore アイテムをエラー ページとして表示するなど) が必要な場合は、Sitecore Market Placeにエラー マネージャーと呼ばれる共有ソース モジュールがあります。

それが役立つことを願っています。

于 2013-03-25T08:50:08.123 に答える
0

サーバーが Web サイトのホスト名にアクセスできるかどうかを確認します。

多くの場合、サーバーは DNS にアクセスできないため、ホスト名を解決できません。404 ハンドラーが機能するには、アプリケーションが独自のホスト名にアクセスして 404 ページを要求できる必要があります。

これが機能することを確認するには、サーバーのホストファイルを編集し、そこにホスト名のエントリを追加して、127.0.0.1 を指すようにします。

于 2013-03-25T11:29:14.317 に答える
0

私は現在働いている顧客で同じ問題を抱えています (コードが貼り付けられたように見えます)。実際にはその理由は明らかです: Sitecore サイト構成に登録されていない URL でこの呼び出しを実行した場合 (ただし、IIS 経由でアクセス可能) )、このコードも実行します。残念ながら、WebUtil.ExecuteWebPage 呼び出しも間違った URL で実行されるため、ループに陥ってしまいます。

実際には、ログに次のようなメッセージが多数表示されるはずです。デフォルトのリダイレクト動作にフォールバックしています。エラー {0} の理由、おそらくタイムアウトです。

カスタム ハンドラーを本当に使用する場合は、WebUtil.ExecuteWebPage を呼び出す前に、適切なサイト コンテキストにいるかどうかを確認する必要があります。

于 2015-11-03T10:40:37.453 に答える