Sitecore ASP.NET - управление псевдонимами для каждого домена - PullRequest
3 голосов
/ 29 марта 2012

У меня есть сайт под управлением 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 Ответ

4 голосов
/ 29 марта 2012

Это возможно. Я уже сделал билет поддержки 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 /", это место, где я хочу, чтобы пользователи устанавливали псевдонимы. Кстати, также обратите внимание, что когда вы меняете AliasResolver таким образом, окно, которое вызывает стандартная кнопка Sitecore Alias, больше не будет обладать необходимой функциональностью. У меня не было времени найти способ заставить это работать, однако вы всегда могли объяснить менеджерам контента, как работать с вашим новым решением.

...