Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如何检查Sitecore项目是否使用别名_Asp.net_Sitecore_Alias_Sitecore6 - Fatal编程技术网

Asp.net 如何检查Sitecore项目是否使用别名

Asp.net 如何检查Sitecore项目是否使用别名,asp.net,sitecore,alias,sitecore6,Asp.net,Sitecore,Alias,Sitecore6,目前,Sitecore中的“别名”将产生指向同一内容项的多条路由,在某些情况下会对SEO产生负面影响 我正在寻找一种通过编程检查当前页面/项目/URL/请求是否使用别名的方法 我希望会有类似的东西: Sitecore.Web.WebUtil.IsAlias 关于如何检查别名有什么想法吗 -------更新------- 这是我目前的解决方案,似乎工作得很好。。。除非有人有更好的主意 protected bool IsAlias { get { string fu

目前,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.Alias.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));
}
if(Sitecore.Configuration.Settings.AliasesActive&&
Sitecore.Context.Database.alias.Exists(HttpContext.Current.Request.RawUrl))
{
常量字符串格式=”;
Item targetItem=Sitecore.Context.Database.GetItem(Sitecore.Context.Database.alias.GetTargetID(HttpContext.Current.Request.RawUrl));
返回String.Format(Format,HttpProtocol,HttpContext.Current.Request.Url.Host,LinkManager.GetItemUrl(targetItem));
}

在您的情况下,我将依赖于
Context.Database.Aliases.Exists(path)
。另外,检查web.config:
Sitecore.Configuration.Settings.AliasesActive

中的别名是否处于活动状态似乎是一个好主意。我们过去所做的是使用别名在页面头部设置链接。
例如,如果您的
/food
别名指向
/news/food
,当您转到/food时,您会将
放在页面的

编辑:

这是另一种方法

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的次数非常感兴趣,因此这可能会更好。我要试一试。非常感谢。谢谢,这是一个更好的解决方案。我已经用新代码更新了我的帖子。