【发布时间】:2011-08-02 21:50:29
【问题描述】:
目前,Sitecore 中的“别名”会产生多个指向同一内容项的路由,这在某些情况下会对 SEO 产生负面影响。
我正在寻找一种以编程方式检查当前 Page/Item/URL/Request 是否使用别名的方法。
我希望会有类似的东西:
Sitecore.Web.WebUtil.IsAlias
关于如何检查别名的任何想法?
-------更新-------
这是我目前的解决方案,它似乎工作得很好......除非有人有更好的想法?:
protected bool IsAlias
{
get
{
string fullPath = LinkManager.GetItemUrl(Sitecore.Context.Item);
return !HttpContext.Current.Request.RawUrl.StartsWith(fullPath, StringComparison.OrdinalIgnoreCase);
}
}
----- 更新 2 ------
这是基于 Yan 的建议的有效解决方案。我不相信 Sitecore.Context.Database.Aliases.GetTargetUrl() 从 Sitecore 6.4.1 开始工作。所以我不得不即兴发挥一点。
if (Sitecore.Configuration.Settings.AliasesActive &&
Sitecore.Context.Database.Aliases.Exists(HttpContext.Current.Request.RawUrl))
{
const string format = "<link rel=\"canonical\" href=\"{0}://{1}{2}\"/>";
Item targetItem = Sitecore.Context.Database.GetItem(Sitecore.Context.Database.Aliases.GetTargetID(HttpContext.Current.Request.RawUrl));
return String.Format(format, HttpProtocol, HttpContext.Current.Request.Url.Host, LinkManager.GetItemUrl(targetItem));
}
【问题讨论】:
标签: asp.net sitecore alias sitecore6