Sitecore-重写&x201C_”;至“-”;在URL中,但转到404

Sitecore-重写&x201C_”;至“-”;在URL中,但转到404,sitecore,Sitecore,我正在使用Sitecore 7.5并替换两个东西 (带连字符的空格) (用连字符下划线) 用连字符(-)替换空格(“”)很好,但是在下划线(389;)的情况下,它在连字符(-)中改变,但重定向到404,你知道吗 我们可以通过事件处理程序来管理它,但不想这样做。我评论说,问题是在解决项目时,传入的项目应用了反向替换。因为有两个替换都映射到“-”,所以在传入时,它会失败,因为它最初尝试用空格替换“-”,但其中一些连字符应该是下划线,但它不知道哪个应该是下划线 例如,给定路径:/path to so

我正在使用Sitecore 7.5并替换两个东西

(带连字符的空格)
(用连字符下划线)
用连字符(-)替换空格(“”)很好,但是在下划线(389;)的情况下,它在连字符(-)中改变,但重定向到404,你知道吗

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

我评论说,问题是在解决项目时,传入的项目应用了反向替换。因为有两个替换都映射到“-”,所以在传入时,它会失败,因为它最初尝试用空格替换“-”,但其中一些连字符应该是下划线,但它不知道哪个应该是下划线

例如,给定路径:
/path to some/item\u url
,则生成的url是
/path to some/item url

传入时,会回复反向替换,Sitecore现在正在查找某个/项目url的路径,该路径不存在,因此会抛出404。由于“u”(下划线)替换为“-”(连字符),因此在传入时“-”(连字符)替换为“(空格)。由于没有要替换的连字符,因此不能用下划线替换

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


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

我写了一篇关于使用规则引擎控制项目命名的博客文章,这对控制URL很有用: