Sitecore - 在网址中将“_”重写为“ - ”,但转到404

时间:2015-06-23 13:57:03

标签: sitecore

我正在使用Sitecore 7.5并替换两件事

<replace mode="on" find=" " replaceWith="-" />(Space with hyphen) 
<replace mode="on" find="_" replaceWith="-" />(underscore with hyphen) 

用hyphne( - )替换空格(“”)工作正常,但在下划线(_)的情况下,它用连字符( - )改变但重定向到404,任何想法?

我们可以通过事件处理程序来管理它,但不希望这样做。

1 个答案:

答案 0 :(得分:10)

我在another answer上评论说问题在于,在解析项目时,传入已应用反向替换。由于你有两个替换,都映射到&#34; - &#34;然后在传入它失败,因为它试图替换&#34; - &#34;最初有空格,但有些连字符应该是下划线但不知道哪一个应该是哪个。

例如,给定路径:/path to some/item_url,则生成的网址为/path-to-some/item-url

在传入时,会回复相反的替换,Sitecore现在正在查找/path to some/item url,它不存在,因此会抛出404。自&#34; _&#34; (下划线)被替换为&#34; - &#34; (连字符),来自&#34; - &#34; (连字符)替换为&#34; &#34; (空间)。由于没有可供替换的连字符,因此不能用下划线替换。

查看Sitecore.Pipelines.HttpRequest.ItemResolver, Sitecore.Kernel,您会看到MainUtil.DecodeName(args.Url.ItemPath)的调用,其中应用了EncodeNameReplacements。

您最好使用事件处理程序来处理这些问题,这样您就不必担心任何类型的映射。