Sitecore将项目路径转换为域名的位置?

时间:2014-11-13 15:40:31

标签: sitecore upgrade sitecore6

我正在运行多站点Sitecore 6.5安装,升级到Sitecore 6.6。在6.5中,指向顶级域的链接正常运行,即指向/ sitecore / content / mydomain / home项的链接解析为mydomain.mysite.org,因为它是通过{{1在web.config中设置的。条目。

升级到6.6后,情况并未发生。 <sites>条目仍然存在,但URL只指向mysite.org/sitecore/content/mydomain.home。 Sitecore无法查明问题,因为我们对基本设置进行了大量自定义(由设置站点的初始供应商完成)。我假设其中一个定制是应该受到责备的,但是我很难确定管道中的确切位置。

呈现链接的实际代码是调用Sitecore.Links.LinkManager.GetItemUrl(),它会在6.6之后立即返回错误的URL。已安装升级包。知道实际域转换发生的地方,所以我可以开始退出一些自定义项,至少知道问题出在哪里了?

更新

这是web.config的<sites>部分(通过showconfig.aspx)。这是在应用了迄今为止的答案之后的建议,即添加targetHostName并使主站点按站点条目的顺序排在最后。

<sites>

2 个答案:

答案 0 :(得分:0)

Sitecore.Links.LinkManager.GetItemUrl的结果取决于配置中配置的LinkProvider,此处:

  <linkManager defaultProvider="sitecore">
    <providers>
      <clear />
      <add name="sitecore" type="Sitecore.Links.LinkProvider, Sitecore.Kernel"
           addAspxExtension="true" alwaysIncludeServerUrl="false" encodeNames="true" 
           languageEmbedding="asNeeded" languageLocation="filePath" 
           lowercaseUrls="false" shortenUrls="true" useDisplayName="false" />
    </providers>
  </linkManager>

您的供应商可能已使用自定义提供程序覆盖该设置。

答案 1 :(得分:0)

听起来就是通过尝试从一个域链接到另一个域(或至少是子域)。确保Rendering.SiteResolving=true,这是默认值,但值得检查:

<!--  SITE RESOLVING
  While rendering item links, some items may belong to different site. Setting this to true
  make LinkManager try to resolve target site in order to use the right host name.
  Default value: true
-->
<setting name="Rendering.SiteResolving" value="true" />

正如Ruud所建议的,共享<sites>您的配置可能有助于检查targetHostName。在6.6配置中不是listed as a value,但如果您有multiple hostNames set,则需要设置此项。

同时验证<site>配置元素的排序,以确定匹配的站点上下文。应首先订购更具体的域名,因此mydomain.mysite.org应列在mysite.org之前。

http://<url>/sitecore/admin/showconfig.aspx检查您的最终配置(或使用Sitecore Rocks),因为它可能会使用Sitecore Include文件进行修补。

编辑:我记得问题是什么:)

不幸的是,默认的UrlOptions和LinkManager会忽略Rendering.SiteResolving(或者这可能是此特定版本的Sitecore中的错误),因为默认的LinkProvider不会初始化此设置!

您需要创建自己的LinkProvider,继承自Sitecore,并覆盖通过此设置的GetItemUrl()方法:

namespace Sitecore.Sample
{
    public class CustomLinkProvider : LinkProvider
    {
        public override string GetItemUrl(Item item, UrlOptions options)
        {
            // use the SiteResolving option set in config
            if (Sitecore.Context.PageMode.IsNormal)
                options.SiteResolving = Sitecore.Configuration.Settings.Rendering.SiteResolving;

            return base.GetItemUrl(item, options);
        }
    }
}

在您的配置中切换到您的提供商:

<linkManager defaultProvider="customProvider">
  <providers>
    <clear />
    <add name="sitecore" ... />
    <add name="customProvider" type="Sitecore.Sample.CustomLinkProvider, Sitecore.Sample"
         addAspxExtension="true" alwaysIncludeServerUrl="false" encodeNames="true" 
         languageEmbedding="asNeeded" languageLocation="filePath" 
         lowercaseUrls="false" shortenUrls="true" useDisplayName="false" />
  </providers>
</linkManager>

您可以在此blog post中详细了解它。