我的网站运行Sitecore 6.3。该网站包括一些子网站(例如www.a.com& www.b.com)。我想问一下:是否可以为这些网站创建单独的别名(例如,www.a.com / alias& www.b.com/alias应该重定向到不同的页面)。现在,如果为网站www.a.com创建别名,它也将在www.b.com上。任何想法如何管理? 日Thnx。
答案 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按钮触发的窗口将不再具有所需的功能。我没有时间去尝试这项工作,但是你总能解释内容管理员如何使用你的新解决方案。