URLに不正な文字を使用した場合のエラー


解説

パスに不正な文字を含むリクエストがサーバーに送信されると、Sitecoreが「アイテムが見つかりません」ページにリダイレクトせずに、以下のようなエラーをスローする場合があります。(例:http:// <hostname> /somepath"/default.aspx)

エラーその1

[ArgumentException: Illegal characters in path.]
   System.IO.Path.CheckInvalidPathChars(String path)
   System.IO.Path.GetExtension(String path)
   Sitecore.Web.RequestFilter.GetExtension(HttpRequest request)
   Sitecore.Web.RequestFilter.IsBlocked(HttpRequest request)
   Sitecore.Web.RequestFilter.Process(HttpRequest request, HttpResponse response, Boolean& blocked, Boolean& sitecoreOn)
   Sitecore.Pipelines.PreprocessRequest.FilterUrlExtensions.Process(PreprocessRequestArgs args)
   ...

エラーその2

[ArgumentException: Illegal characters in path.]
   System.IO.Path.CheckInvalidPathChars(String path)
   System.IO.Path.GetExtension(String path)
   Sitecore.IO.FileUtil.GetExtension(String path)
   Sitecore.Pipelines.HttpRequest.BeginDiagnostics.Process(HttpRequestArgs args)
   ...

エラーその3

[ArgumentException: Illegal characters in path.]
   System.IO.Path.GetExtension(String path)
   Sitecore.IO.FileUtil.GetExtension(String path)
   Sitecore.Web.RewriteModule.ShouldRequestBeSkipped(HttpRequest request)
   Sitecore.Web.RewriteModule.SaveAndRevertPath(HttpApplication app, String fromKey, String toKey)
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
   ...

エラーその4

[ArgumentException: Illegal characters in path.]
   System.IO.Path.GetExtension(String path)
   Sitecore.IO.FileUtil.GetExtension(String path)
   Sitecore.Pipelines.HttpRequest.EndDiagnostics.Process(HttpRequestArgs args)
   (Object , Object[] )
   Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args)
   Sitecore.Nexus.Web.HttpModule.(Object , EventArgs )
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
   ...

解決策

例外を表示せずに「アイテムが見つかりません」ページへリダイレクトさせたい場合、以下を実行してください。

  1. Sitecore.Support.388283.388284.dll アセンブリを/bin フォルダーに配置します。
  2. web.config ファイルの<modules>行と<httpModules>行の後の最初の行として、次の行を挿入します。
    <add type="Sitecore.Support.IllegalCharactersChecker, Sitecore.Support.388283.388284" name="IllegalCharactersCheckerModule" />
  3. web.config ファイルの次の行を、以下のように変更します。
    変更前:
    <processor type="Sitecore.Pipelines.HttpRequest.EndDiagnostics, Sitecore.Kernel" />
    変更後:
    <processor type="Sitecore.Support.Pipelines.HttpRequest.EndDiagnostics, Sitecore.Support.388283.388284" />