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

Sitecore ASP.NET-管理每个域的别名,sitecore,alias,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.这是可能的。我已经为此制作了Sitecore支持票证。我也解决了这个问题,他们的解决方案对我来说效果很好。(尚未在live网站上实施,因为我们尚未就

我有一个运行Sitecore 6.3的站点。该网站包括一些子网站(例如www.a.com和www.b.com)。我想问:是否可以为此网站创建单独的别名(例如,www.a.com/alias&www.b.com/alias应重定向到不同的页面)。现在,如果为网站www.a.com创建别名,它也将位于www.b.com中。有什么办法来管理吗?
Thnx.

这是可能的。我已经为此制作了Sitecore支持票证。我也解决了这个问题,他们的解决方案对我来说效果很好。(尚未在live网站上实施,因为我们尚未就成本达成协议)。这是您可能希望查看的一些示例代码:

   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;
    }
}
类多站点别名解析器:别名解析器 { 公共新作废流程(HttpRequestArgs args) { Assert.ArgumentNotNull(args,args); 如果(!Settings.AliasesActive) { Tracer.Warning(“别名未激活”); } 其他的 { Sitecore.Data.Database Database=Sitecore.Context.Database; if(数据库==null) { Tracer.Warning(“AliasResover中没有上下文数据库。”); } Item aliasItem=getAliasItem(args); 如果(别名项!=null) { LinkField LinkField=aliasItem.Fields[“链接项”]; if(linkField!=null) { Item AliasLinkedTo=Sitecore.Context.Database.GetItem(linkField.TargetID); if(AliasLinkedTo!=null) { Sitecore.Context.Item=AliasLinkedTo; } } 其他的 { 基本过程(args); } } } } /// ///获取别名项。 /// ///args。 /// 私有项getAliasItem(HttpRequestArgs args) { 字符串websitePath=Sitecore.Context.Site.RootPath.ToLower(); 如果(args.LocalPath.Length>1) { Item aliasItem=Sitecore.Context.Database.GetItem(websitePath+“/settings/aliassen/”+args.LocalPath); 如果(别名项!=null) { 退货项目; } } 返回null; } } 可以将此类插入web.config中以代替别名解析程序。例如:

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

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


更新:在我的示例中,每个网站节点“/settings/aliassen/”下都有一个文件夹,这是我希望用户设置alliases的位置。顺便说一句,还请注意,当您像这样更改AliasResolver时,标准Sitecore Alias按钮触发的窗口将不再具有所需的功能。我还没有时间想办法让它发挥作用,但是您可以随时向内容经理解释如何使用您的新解决方案。

默认情况下,Sitecore中没有这样做的方法。我认为这个功能是可以实现的,但我不知道从哪里开始。也许可以尝试询问Sitecore(需要访问权限,如果您接受过Sitecore培训,您应该获得访问权限)如果答案对您有效,请接受…谢谢,这正是我需要的!这已作为一个模块发布,您可以从->Multisite alias resolver下载