Sitecore ASP.NET - 管理每个域的别名

时间:2012-03-29 10:31:31

标签: sitecore alias

我的网站运行Sitecore 6.3。该网站包括一些子网站(例如www.a.com& www.b.com)。我想问一下:是否可以为这些网站创建单独的别名(例如,www.a.com / alias& www.b.com/alias应该重定向到不同的页面)。现在,如果为网站www.a.com创建别名,它也将在www.b.com上。任何想法如何管理? 日Thnx。

1 个答案:

答案 0 :(得分:4)

这是可能的。我已经为此制作了Sitecore支持票。我也解决了这个问题,对我而言,他们的解决方案运行良好。 (尚未在实时网站上实现它,因为我们尚未就成本达成一致)。这是您可能想要查看的一些示例代码:

   class MultiSiteAliasResolver : AliasResolver
{
    public new void Process(HttpRequestArgs args)
    {
        Assert.ArgumentNotNull(args, "args");

        if (!Settings.AliasesActive)
        {
            Tracer.Warning("Aliases are not active.");
        } 
        else 
        {
            Sitecore.Data.Database database = Sitecore.Context.Database;
            if (database == null)
            {
                Tracer.Warning("There is no context database in AliasResover.");
            }

            Item aliasItem = getAliasItem(args);
            if (aliasItem != null)
            {
                LinkField linkField = aliasItem.Fields["Linked item"];
                if (linkField != null)
                {
                    Item AliasLinkedTo = Sitecore.Context.Database.GetItem(linkField.TargetID);

                    if (AliasLinkedTo != null)
                    {
                        Sitecore.Context.Item = AliasLinkedTo;
                    }
                }
                else
                {
                    base.Process(args);
                }
            }
        }            
    }

    /// <summary>
    /// Gets the alias item.
    /// </summary>
    /// <param name="args">The args.</param>
    /// <returns></returns>
    private Item getAliasItem(HttpRequestArgs args) 
    {
        string websitePath = Sitecore.Context.Site.RootPath.ToLower();

        if (args.LocalPath.Length > 1)
        {
            Item aliasItem = Sitecore.Context.Database.GetItem(websitePath + "/settings/aliassen/" + args.LocalPath);

            if (aliasItem != null)
            {
                return aliasItem;
            }                
        }

        return null;
    }
}

可以在web.config中插入此类来代替AliasResolver。例如:

<processor type="CommandTemplates.Classes.MultiSiteAliasResolver, CommandTemplates" />

我希望这对你有用,祝你好运!

更新:在我的示例中,我在每个网站节点“/ settings / aliassen /”下都有一个文件夹,这是我希望用户设置alliases的位置。顺便说一下,还要注意当您更改AliasResolver时,标准Sitecore Alias按钮触发的窗口将不再具有所需的功能。我没有时间去尝试这项工作,但是你总能解释内容管理员如何使用你的新解决方案。