Как проверить, использует ли элемент 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"] установлено и отобразить его.

Другие вопросы по тегам