2011-08-02 7 views
5

Actualmente, un "Alias" en Sitecore generará varias rutas hacia el mismo elemento de contenido, lo que puede afectar negativamente al SEO en algunos casos.Cómo comprobar si el elemento de Sitecore está usando el alias

Estoy buscando una forma de comprobar programáticamente si la Página/Elemento/URL/Solicitud actual está usando un alias o no.

Tenía la esperanza de que sería algo a lo largo de las líneas de:

Sitecore.Web.WebUtil.IsAlias 

Cualquier ideas sobre cómo comprobar los alias?

ACTUALIZACIÓN ------- -------

Aquí está mi solución actual que parece funcionar bien ... A menos que alguien tiene una idea mejor ?:

protected bool IsAlias 
{ 
    get 
    { 
     string fullPath = LinkManager.GetItemUrl(Sitecore.Context.Item); 
     return !HttpContext.Current.Request.RawUrl.StartsWith(fullPath, StringComparison.OrdinalIgnoreCase); 
    } 
} 

------ ACTUALIZACIÓN 2 ------

Aquí hay una solución de trabajo basada en las sugerencias de Yan. No creo que Sitecore.Context.Database.Aliases.GetTargetUrl() funcione a partir de Sitecore 6.4.1. así que tuve que improvisar un poco.

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)); 
} 

Respuesta

4

Me basaría en el Context.Database.Aliases.Exists(path) en su caso. Además, parece ser una buena idea comprobar si los alias están activos en el archivo web.config: Sitecore.Configuration.Settings.AliasesActive.

+0

Gracias, esta es una solución mucho mejor. Actualicé mi publicación con un nuevo código. –

7

Lo que hemos hecho en el pasado es cuando un alias se usa para establecer un enlace canonical url en el encabezado de la página.
Por ejemplo, si tiene /food alias que apuntan a /news/food cuando se va a la/comida que voy a poner en el <link href="http://[websiteurl]/news/food" rel="canonical" /><head> de la página.

EDIT:

Aquí es otra forma

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); 
     } 
    } 
} 

Luego, en el control de cabecera todo lo que tiene que hacer es comprobar si se ajusta HttpContext.Current.Items["CanonicalUrl"] y mostrarlo.

+0

Gracias! Eso es lo que estoy haciendo, pero olvidé incluir eso en mi pregunta para abreviar. –

+0

Ya veo. Actualicé mi respuesta con una forma alternativa :) – marto

+0

Gracias por la solución. Estoy muy interesado en limitar la cantidad de viajes de ida y vuelta a Sitecore.Context.Database, así que esto puede funcionar mejor. Voy a darle un giro. Muchas gracias. –

Cuestiones relacionadas