2011-08-02 28 views
5

目前,Sitecore中的「別名」會產生多條路線到相同的內容項目,在某些情況下會對SEO產生負面影響。如何檢查Sitecore項目是否正在使用別名

我正在尋找一種編程方式來檢查當前的頁面/項目/ URL /請求是否使用別名。

我希望會有沿着線的東西:

Sitecore.Web.WebUtil.IsAlias 

任何想法如何檢查的別名?

------- ------- UPDATE

下面是這似乎就好了我的工作,目前的解決方案......除非有人有更好的想法?:

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

回答

4

我會依靠Context.Database.Aliases.Exists(path)你的情況。此外,檢查別名是否在web.config中處於活動狀態似乎是個好主意:Sitecore.Configuration.Settings.AliasesActive

+0

謝謝,這是一個更好的解決方案。我用新代碼更新了我的帖子。 –

7

我們過去所做的是在頁面頭部使用別名來設置canonical 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); 
     } 
    } 
} 

然後在你的頭控制所有你需要做的是檢查HttpContext.Current.Items["CanonicalUrl"]是否設置和顯示。

+0

謝謝!這就是我正在做的,但我忽略了爲了簡潔在我的問題中包含這些。 –

+0

我明白了。我用另一種方式更新了我的答案:) – marto

+0

感謝您的解決方案。我對限制往返於Sitecore.Context.Database的往返數量非常感興趣,所以這可能會更好。我會給它一個旋風。非常感謝。 –

相關問題