我在单个sitecore下有多个站点,我为每个站点配置了“EmailCampaigh Message Root”。
我创建了一个包含此网站链接的新闻稿模板
我发送了电子邮件
我收到了电子邮件,当我点击显示“未找到文件”页面
的链接时我在SiteDefinition.Config中做了一些更改但是没有用。
有没有人知道如何为多个站点配置ECM。
由于
答案 0 :(得分:0)
我看到你已经解决了这个问题,但对于未来的读者: 我遇到了同样的问题(Sitecore 6.6,ECM 1.2.0):
如果你的'Rendering.SiteResolving'设置为' true',然后Sitecore将尽可能使用子域,使您的内部链接使用SiteDefinition.config中定义为hostName的子域(如果您将站点定义保留在那里,则使用web.config) )。
示例:如果您插入sitecore / Content / Website / somesite的内部链接,则在新闻稿中此链接应该成为
http://yourdomain.com/sitecore/RedirectUrlPage.aspx?ec_url=/somesite?...
但是,如果您的网站定义包含hostName ="某个网站",那么该链接将成为
http://yourdomain.com/sitecore/RedirectUrlPage.aspx?ec_url=http://somesite.yourdomain.com?....
如果您检查Sitecore.Modules.EmailCampaign.Core.EmailResponse类,该sitecore / RedirectUrlPage.aspx继承自,您会看到:
string link = Context.Request.QueryString["ec_url"];
...
bool isInternal = link.StartsWith("/", StringComparison.OrdinalIgnoreCase) && !link.StartsWith("//", StringComparison.OrdinalIgnoreCase);
因此,您的子域名链接不再被接受为内部 - 然后会发生这种情况:
if (!isInternal && !ExternalLinks.IsLinkRegistered(message, link))
throw new EmailCampaignException("The unregistered external link: " + link + " detected.");
您可以通过将siteresolving-setting更改为false来轻松解决此问题。对我来说,由于几个原因,这是不可能的,所以这就是我所做的 - 请告诉我你是否有更好的方法: 我让RedirectUrlPage.aspx继承自定义类,该类调用自定义EmailReponse。在这里,我将条件更改为:
bool isInternal = (link.StartsWith("/", StringComparison.OrdinalIgnoreCase) && !link.StartsWith("//", StringComparison.OrdinalIgnoreCase)) || link.IndexOf("yourdomain") > -1;
这个有效! 当然,硬编码的域名应该被像HttpContext.Current.Request.Url.Host这样的东西取代,但我还没有在生产中测试到 - 在下一次部署中会做什么。