【问题标题】:Sitecore - rewrite " " to "-" in urls but still allow dashes as legal item namesSitecore - 将 URL 中的“”重写为“-”,但仍允许将破折号作为合法的项目名称
【发布时间】:2013-04-19 22:36:35
【问题描述】:

我已经阅读了六篇关于在 Sitecore 中将空格重写为更友好的内容的指南,但它们都依赖于 Sitecore 的 <encodeNameReplacements/> 元素,它也反转了需要“-”作为名称的非法字符的替换。

这个问题是我们应用程序的 url 在主机名中有一个“-”。 Sitecore 将其重写为 404。

有没有人知道如何在 Sitecore 中重写这个 url,而不依赖 <encodeNameReplacements 并且仍然允许“-”作为合法的项目名称字符?我们目前最好的想法是使用比普通的“-”更复杂的东西,例如“--”或“_”。这不是一个好主意,所以如果你们对此事有任何见解,我将不胜感激。

编辑:我们正在使用 Sitecore 6.5 运行多站点设置

【问题讨论】:

  • 您是否正在运行多站点实施?
  • 是的。我们正在运营两个网站。

标签: url-rewriting seo sitecore sitecore6


【解决方案1】:

因此,如果我的假设正确,您希望将项目名称中的空格替换为其他一些对 SEO 更友好的字符。无论您配置什么替换,您都需要在等式的两侧应用转换(双关语)。所以 '--' 或 '_' 必须成为非法的物品名称字符。

我通常认为这样做是个坏主意,我宁愿让我的内容编辑器确定其内容的确切网址。

但是,如果您绝对需要将其作为一项规则来实施,那么解决方案之一是implement a custom handler to change your real item name,同时将项目显示名称保留为其原始形式。

希望这会有所帮助。

【讨论】:

  • 他说的是主机名,而不是项目名。但是,虽然我大体上同意那篇文章,但当人们想要使用显示名称字段来使用本地化 URL 时,在多语言网站中并不总是可行的。
  • 自定义处理程序是我们正在寻找的。谢谢!
【解决方案2】:

您使用的是哪个版本的 Sitecore?

我刚刚浏览了Sitecore.Kernel 中的Sitecore.Links.LinkProviderBuildItemUrl 方法仅替换 URL 路径部分中的字符 encodeNameReplacements,因此它应该不理会您的主机名。

我希望同样的情况会发生逆转,并且查看Sitecore.Pipelines.HttpRequest.SiteResolver SiteContext 是通过将请求的 Uri 与定义的站点匹配来解决的。再往下,Sitecore.Pipelines.HttpRequest.ItemResolver 会解码项目 URL,但在此阶段站点已被解析。

我想你已经在<site> 元素上设置了hostName 属性?您是否也尝试过设置targetHostName 属性?您是否尝试过设置多个主机名,我不希望它与空格一起使用,但如果您说的是真的,值得一试:

<site name="website" hostName="my-site.com|my site.com"  ... />

我尝试在我的本地机器上复制您的问题,但它对我来说按预期工作...除非您使用非常奇怪的字符集,否则在我看来这仍然是编码名称的最佳方式。

【讨论】:

  • 我正在替换两个东西 (带连字符的空格)(带连字符的下划线)但在下划线()的情况下,它的连字符(-)改变但重定向到404,有什么想法吗?
  • @GauravAgarwal 问题是在解析项目时,传入应用了反向替换。由于您有 2 个替换都映射到“-”,因此在传入时它会失败,因为它最初尝试用空格替换“-”,但是其中一些连字符应该是下划线,但它不知道哪个应该是哪个。您最好首先使用事件处理程序来处理这些问题。在接下来的几天里,我将发布一篇关于项目命名的博文,您会觉得很有帮助。
  • 是的事件处理程序是个好主意,但如果可能的话我想这样做,它在'$'的情况下工作正常, 之后的 "-" />,两者都在工作,但只有下划线会造成问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多