【问题标题】:How to check whether Sitecore item is using alias如何检查 Sitecore 项目是否使用别名
【发布时间】:2011-08-02 21:50:29
【问题描述】:

目前,Sitecore 中的“别名”会产生多个指向同一内容项的路由,这在某些情况下会对 SEO 产生负面影响。

我正在寻找一种以编程方式检查当前 Page/Item/URL/Request 是否使用别名的方法。

我希望会有类似的东西:

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 ------

这是基于 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));
}

【问题讨论】:

    标签: asp.net sitecore alias sitecore6


    【解决方案1】:

    我们过去所做的是使用别名在页面头部设置canonical url 链接。
    例如,如果您有 /food 别名指向 /news/food,当您转到 /food 时,您会将 &lt;link href="http://[websiteurl]/news/food" rel="canonical" /&gt; 放在页面的 &lt;head&gt; 中。

    编辑:

    这是另一种方式

    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 的往返次数非常感兴趣,因此这可能会更好。我会试一试。非常感谢。
    【解决方案2】:

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

    【讨论】:

    • 谢谢,这是一个更好的解决方案。我已经用新代码更新了我的帖子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 2016-02-26
    • 1970-01-01
    相关资源
    最近更新 更多