Asp.net 如何检查Sitecore项目是否使用别名
目前,Sitecore中的“别名”将产生指向同一内容项的多条路由,在某些情况下会对SEO产生负面影响 我正在寻找一种通过编程检查当前页面/项目/URL/请求是否使用别名的方法 我希望会有类似的东西:Asp.net 如何检查Sitecore项目是否使用别名,asp.net,sitecore,alias,sitecore6,Asp.net,Sitecore,Alias,Sitecore6,目前,Sitecore中的“别名”将产生指向同一内容项的多条路由,在某些情况下会对SEO产生负面影响 我正在寻找一种通过编程检查当前页面/项目/URL/请求是否使用别名的方法 我希望会有类似的东西: Sitecore.Web.WebUtil.IsAlias 关于如何检查别名有什么想法吗 -------更新------- 这是我目前的解决方案,似乎工作得很好。。。除非有人有更好的主意 protected bool IsAlias { get { string fu
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------
这是一个基于严的建议的有效解决方案。我不相信Sitecore.Context.Database.Alias.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));
}
if(Sitecore.Configuration.Settings.AliasesActive&&
Sitecore.Context.Database.alias.Exists(HttpContext.Current.Request.RawUrl))
{
常量字符串格式=”;
Item targetItem=Sitecore.Context.Database.GetItem(Sitecore.Context.Database.alias.GetTargetID(HttpContext.Current.Request.RawUrl));
返回String.Format(Format,HttpProtocol,HttpContext.Current.Request.Url.Host,LinkManager.GetItemUrl(targetItem));
}
在您的情况下,我将依赖于Context.Database.Aliases.Exists(path)
。另外,检查web.config:Sitecore.Configuration.Settings.AliasesActive
中的别名是否处于活动状态似乎是一个好主意。我们过去所做的是使用别名在页面头部设置链接。例如,如果您的
/food
别名指向/news/food
,当您转到/food时,您会将
放在页面的
中
编辑:
这是另一种方法
public class AliasResolver : Sitecore.Pipelines.HttpRequest.AliasResolver
{
public override void Process(HttpRequestArgs args)
{
base.Process(args);
if (Context.Item != null)
{
args.Context.Items["CanonicalUrl"] = Context.Item.GetFullUrl(args.Context.Request.Url);
}
}
}
然后在标题控件中,您需要做的就是检查是否设置了
HttpContext.Current.Items[“CanonicalUrl”]
,并显示它 谢谢!这就是我正在做的,但为了简洁起见,我忽略了在我的问题中包含这一点。谢谢你的解决方案。我对限制往返Sitecore.Context.Database的次数非常感兴趣,因此这可能会更好。我要试一试。非常感谢。谢谢,这是一个更好的解决方案。我已经用新代码更新了我的帖子。