如何检查Sitecore项是否正在使用别名

Der*_*ker 5 asp.net alias sitecore sitecore6

目前,Sitecore中的"别名"将生成到同一内容项的多条路线,在某些情况下会对SEO产生负面影响.

我正在寻找一种方法来以编程方式检查当前页面/项目/ URL /请求是否使用别名.

我希望有一些东西:

Sitecore.Web.WebUtil.IsAlias
Run Code Online (Sandbox Code Playgroud)

有关如何检查别名的任何想法?

------- -------更新

这是我目前的解决方案似乎工作得很好......除非有人有更好的想法?:

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

------更新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));
}
Run Code Online (Sandbox Code Playgroud)

mar*_*rto 7

我们过去所做的是使用别名在页面的头部设置规范URL链接.
例如,如果你有/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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在标题控件中,您需要做的就是检查是否HttpContext.Current.Items["CanonicalUrl"]已设置并显示它.


Yan*_*nko 4

我会依靠Context.Database.Aliases.Exists(path)你的情况。另外,检查 web.config: 中的别名是否处于活动状态似乎是个好主意Sitecore.Configuration.Settings.AliasesActive