Как проверить, использует ли элемент Sitecore псевдоним
В настоящее время "Псевдоним" в Sitecore будет создавать несколько маршрутов к одному и тому же элементу контента, что в некоторых случаях может негативно повлиять на SEO.
Я ищу способ программной проверки того, использует ли текущая страница / элемент /URL/ запрос псевдоним или нет.
Я надеялся, что будет что-то вроде:
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.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));
}
2 ответа
Я бы положился на Context.Database.Aliases.Exists(path)
в твоем случае. Также неплохо проверить, активны ли псевдонимы в файле web.config: Sitecore.Configuration.Settings.AliasesActive
,
То, что мы сделали в прошлом, это когда псевдоним используется для установки канонической ссылки в заголовке страницы.
Например, если у вас есть /food
псевдоним, указывающий на /news/food
когда вы идете в / еду вы положите <link href="http://[websiteurl]/news/food" rel="canonical" />
в <head>
страницы.
РЕДАКТИРОВАТЬ:
Вот еще один способ
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"]
установлено и отобразить его.