encodeNameReplacements設定を使用する場合に、Sitecoreがメディアや標準アイテムを開けない


説明

メディアの接頭辞またはアイテム名にencodeNameReplacements設定セクションで指定されている文字が含まれている場合、Sitecoreがメディア アイテムへのリクエストに対して、Item Not Foundページを表示する場合があります。
例として、encodeNameReplacements設定セクションに次のノードが含まれている場合の事例を説明します。

<replace mode="on" find=" " replaceWith="-" />

事例1:Sitecore 7.2 rev.151021 (Update-5)で修正済み
メディアの接頭辞として-/media/を使用すると、標準のIIS Not Foundページが表示され失敗します。

事例2:Sitecore 8.0 rev 150427 (Update-3)で修正済み
/Files/Media-Itemパスを含むメディア アイテムをリクエストすると、Item Not Foundページが表示され失敗します。

事例3:Sitecore 9.0 rev 171002 (Initial Release)で修正済み
MVCサイトでは、URLがencodeNameReplacements構成セクションからの文字を含む場合、ワイルドカード アイテムがコンテキスト アイテムとして使用されます。
例えば、/sitecore/content/Home/* アイテムと/sitecore/content/Home/MVC Testアイテムがある場合、http:///MVC-Testアイテムを開こうとすると、コンテキスト アイテムが/sitecore/content/Home/*に設定されます。

事例4:Sitecore 8.1 rev 160302 (Update-2)で修正済み
パスにエンコードされる記号とエンコードされない記号を両方含むアイテムをリクエストすると、Item Not Foundページが表示されます。
例えば、Home/Sample Item-NameまたはHome/Sample Item/Item-Nameなどです。

解決策

事例1および事例2
1. Sitecore.Support.414259.416567.dllファイルを\binフォルダに配置します。
2. web.configファイルの次の行を

<requestParser type="Sitecore.Resources.Media.MediaRequest, Sitecore.Kernel" />

次の行に置き換えます:

<requestParser type="Sitecore.Support.Resources.Media.MediaRequest, Sitecore.Support.414259.416567" />

3. web.configファイルの次の行を

<processor type="Sitecore.Pipelines.HttpRequest.CustomHandlers, Sitecore.Kernel" />

次の行に置き換えます:

<processor type="Sitecore.Support.Pipelines.HttpRequest.CustomHandlers, Sitecore.Support.414259.416567" />

事例3
1. \App_Config\Include\Sitecore.Mvc.configファイルを開きます。
2. <mvc.getPageItem>セクションの定義されたプロセッサの順番を次の通り変更します:

<mvc.getPageItem>
 <processor type="Sitecore.Mvc.Pipelines.Response.GetPageItem.SetLanguage, Sitecore.Mvc"/>
 <processor type="Sitecore.Mvc.Pipelines.Response.GetPageItem.GetFromOldContext, Sitecore.Mvc"/>
 <processor type="Sitecore.Mvc.Pipelines.Response.GetPageItem.GetFromRouteValue, Sitecore.Mvc"/>
 <processor type="Sitecore.Mvc.Pipelines.Response.GetPageItem.GetFromRouteUrl, Sitecore.Mvc"/>
</mvc.getPageItem>

事例4
すべてのアイテムのパス名にエンコードされる記号(スペース)のみ、またはエンコードされない記号(ダッシュ)のみが含まれるよう、アイテム名を変更します。例えば、Home/Sample Item NameまたはHome/Sample-Item/Item-Nameに変更します。

または、ユーザがスペースおよび「-」文字の両方を含むアイテムを作成しないよう、\web.config または \App_Config\Sitecore.configファイルのItemNameValidation設定を^[\w\*\$]([\w\-\$]*|[\w\s\$]*)(\(\d{1,}\)){0,1}$に変更することができます。

備考

Sitecore 8.1 rev. 160302 (update-2)以降、エンコードされる文字、およびエンコードされない文字の両方をパスまたは名称に使用することが可能になりました。

 <setting name="ItemNameAllowMixingReplacementCharacters" value="true" />
 <setting name="ItemResolving.FindBestMatch" value="DeepScan" />

これらの設定の影響に関する詳細につきましては、Sitecore.configファイルに確認してください。