我正在使用Sitecore 7.5并替换两件事
<replace mode="on" find=" " replaceWith="-" />(Space with hyphen)
<replace mode="on" find="_" replaceWith="-" />(underscore with hyphen)
用hyphne( - )替换空格(“”)工作正常,但在下划线(_)的情况下,它用连字符( - )改变但重定向到404,任何想法?
我们可以通过事件处理程序来管理它,但不希望这样做。
答案 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。
您最好使用事件处理程序来处理这些问题,这样您就不必担心任何类型的映射。