Sitecore-电子邮件广告系列链接重定向问题

时间:2015-04-22 07:32:12

标签: sitecore sitecore-dms sitecore-ecm

我在单个sitecore下有多个站点,我为每个站点配置了“EmailCampaigh Message Root”。

我创建了一个包含此网站链接的新闻稿模板

我发送了电子邮件

我收到了电子邮件,当我点击显示“未找到文件”页面

的链接时

我在SiteDefinition.Config中做了一些更改但是没有用。

有没有人知道如何为多个站点配置ECM。

由于

1 个答案:

答案 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这样的东西取代,但我还没有在生产中测试到 - 在下一次部署中会做什么。