2012-03-29 37 views
3

我有网站运行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 ASP.NET - 管理别名每个域

+0

在Sitecore中默认没有这样做的方法。我会假定可以做出这个功能,但我不知道从哪里开始。也许尝试通过https://support.sitecore.net/helpdesk/Default.aspx询问Sitecore(需要访问权限,如果您已经使用Sitecore培训,则应该获得该权限) – Holger 2012-03-29 10:54:29

+0

如果它对您有效,请接受答案... – 2012-04-02 12:44:43

回答

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 /”下都有一个文件夹,这是我希望用户设置所有链接的位置。顺便说一句,还要注意,当您像这样更改AliasResolver时,标准Sitecore别名按钮触发的窗口将不再具有所需的功能。我没有时间去完成这项工作,但是您可以随时向内容管理者解释如何使用新解决方案。

+0

谢谢,这正是我需要的! – user1300494 2012-03-30 08:59:00

+0

这已经作为一个模块发布,您可以从http://marketplace.sitecore.net下载 - >多站点别名解析器 – Younes 2014-12-04 18:16:28