解决Sitecore 10.1.3 CD环境中的Sitecore多站点之间的internal link问题

在我们的工作中,遇到了一个关于Sitecore站点定义的问题,导致在Sitecore 10.1.3的CD环境中出现了链接生成错误的情况。在此,我将分享这个问题的细节以及解决方案。

引用与参考

https://archive.doc.sitecore.com/xp/en/SdnArchive/SDN5/Articles/Administration/Configuring%20Multiple%20Sites/Adding%20New%20Site/site%20Attribute%20Properties/targetHostName.html
https://support.sitecore.com/kb?id=kb_article_view&sysparm_article=KB1000633

问题描述

具体现象是在站点A引用站点B的节点时,链接里的/sitecore/content关键字没有被正确解析,导致链接生成错误。需要特别注意的是,这个问题只在CD环境中出现,而在CM环境中是正确的。

发现问题

由于CD环境不能调试,我们创建aspx文件上传到测试CD环境中,来尝试打印一些关键属性

<%@ Language=C# %>
<%@ Import Namespace="Sitecore.Sites" %>
<HTML>
   <script runat="server" language="C#">
   void MyButton_OnClick(Object sender, EventArgs e)
   {    
        var defaultSiteContextFactory = new DefaultSiteContextFactory();
        foreach (var site in defaultSiteContextFactory.GetSites())
        {
            var poperty = site.Properties["enablePreview"];
            MyLabel.Text += $"Name:{site.Name};\tRootPath:{site.RootPath};\tStartItem:{site.StartItem};\tHostName:{site.HostName};\tTargetHostName:{site.TargetHostName};\tEnablePreview:{site.EnablePreview};\tPropertyEnablePreview:{poperty}; <br />";
        }

        MyLabel.Text +="<br /><br />";
        MyLabel.Text += $"Setting.Preview.Enabled: {Sitecore.Configuration.Settings.Preview.Enabled} <br />";
   }
   </script>
   <body>
      <form id="MyForm" runat="server">
         <asp:button id="MyButton" text="Print" OnClick="MyButton_OnClick" runat="server"></asp:button>
         <br />
         <asp:label id="MyLabel" runat="server"></asp:label>
      </form>
   </body>
</HTML>

探索问题

在分析问题时,我们发现问题根源主要出在Sitecore站点定义时。缺少了一个关键的配置项,即targetHostName,以及一个重要的属性enablePreview没有被显示声明。自定义站点都是继承website
默认website站点中的enablePreview属性是"true", 在本地环境和CM环境中,也都是正确的。但是CD环境中所有自定义站点以及websiteenablePreview属性都是"false", 目前还不知道为什么。

在sitecore中的website站点的默认定义如下:

<site name="website" enableTracking="true" virtualFolder="/" physicalFolder="/" rootPath="/sitecore/content" startItem="/home" language="en" database="web" domain="extranet" allowDebug="true" cacheHtml="true" htmlCacheSize="50MB" registryCacheSize="0" viewStateCacheSize="0" xslCacheSize="25MB" filteredItemsCacheSize="10MB" enablePreview="true" enableWebEdit="true" enableDebugger="true" disableClientData="false" cacheRenderingParameters="true" renderingParametersCacheSize="10MB" enableItemLanguageFallback="false" enableFieldLanguageFallback="false" role:require="Standalone or ContentManagement or XMCloud or ContentDelivery or DedicatedDispatch" />

解决步骤

为了解决这个问题,我们采取了以下关键步骤:

  1. 添加targetHostName: 在Sitecore站点定义中,确保添加了正确的targetHostName,以保证CD环境中的链接能够正确解析。

  2. 明确声明enablePreview属性: 确保在站点定义中明确声明了enablePreview属性。这对于CD环境的正常工作至关重要。

问题的关键细节

一个值得强调的关键细节是,由于CD的hostname具有通用性,缺少这两个配置项导致CD无法正确工作。相比之下,CM的hostname是固定的,不受此问题影响。

这个细节对于理解问题的本质和解决方案的有效性非常关键。

结论

通过添加正确的targetHostName和明确声明enablePreview属性,我们成功解决了Sitecore 10.1.3 CD环境中的Sitecore问题。这个经验提醒我们在站点定义时要特别注意这些关键配置,以确保系统在不同环境下都能够正常运行。

希望这篇分享能对遇到类似问题的同行提供帮助。如果你有任何疑问或补充,请随时在评论区分享。

评论

还没有人评论,抢个沙发吧...

Viagle Blog

欢迎来到我的个人博客网站