2014-01-13 150 views
4

我們在FR,ES,EN中創建了來自古典asp網站(也是3種語言)的多語種網站。默認情況下,舊網站中的英文語言「en」未嵌入URL中。但在我們的新sitecore網站我有語言嵌入=「始終」。嵌入Sitecore的語言URL

因此,當我們從舊網站重定向到新網站的301重定向在谷歌,如果我打開我的法語新網站,並從舊網站重定向是英語(這意味着在該網址沒有語言即「 en「)鏈接將指向法文版)。

那麼我怎麼能加「en」到網址。

HttpContext.Current.Request.RawUrl 

我可以使用上面的原始URL,但我沒有得到如何在瀏覽器url中顯示「en」。

舊網站鏈接:

www.abc.com/xyz.asp, 
www.abc.com/fr/xyz.asp, 
www.abc.com/es/xyz.asp 

新網站鏈接:

www.abc.com/en/xyz.aspx, 
www.abc.com/fr/xyz.aspx, 
www.abc.com/es/xyz.aspx 

感謝

+0

有沒有辦法來實現你想要的開箱即用,你能做的唯一的事情就是檢查請求的URL是否包含語言,如果沒有,那麼302會重定向回自己包括語言(但你現在有3跳到內容)。 – jammykam

+0

你能建議任何自定義標準來構建這個 – Sam

+2

你可以使用IIS URL重寫功能。然後定義一個將所有請求(如/*.asp)重定向到新URL的模式,如/en/*.aspx。這隻有在路徑完全相同且所有舊路徑存在於新站點時纔有效。 –

回答

0

我不知道你問這裏到底是什麼,但如果你需要的網址使用特定Sitecore項目的語言嵌入,您只需要爲鏈接提供商配置languageEmbedding="always",然後使用LinkManager請求該項目的URL:

Sitecore.Links.LinkManager.GetItemUrl(item); 

如果你需要一個特定語言的URL或直接在您的代碼中設置languageEmbedding選項,您可以設置在UrlOptions

var options = Sitecore.Links.LinkManager.GetDefaultUrlOptions(); 
options.LanguageEmbedding = Sitecore.Links.LanguageEmbedding.Always; 
options.EmbedLanguage(Sitecore.Globalization.Language.Parse("en")); 

Sitecore.Links.LinkManager.GetItemUrl(item, options); 

希望幫助!

+0

我編輯的問題請檢查可能是有幫助的。 – Sam

2

你是如何處理舊網站中的語言的?您是如何知道用戶在EN/FR/ES中請求頁面的?

由於您正在使用舊站點中的301進行重定向,因此您需要處理嵌入到舊站點URL中的語言。從Sitecore方面處理它將增加最好的只給你一個「漂亮」的網址,另外一個缺點是在你檢查重定向之後,不得不在另一個302重定向中添加一個語言嵌入或不嵌入。 Ruud建議使用IIS Rewrite是一個不錯的選擇。

所以,當我們從舊網站重定向到新的網站301在谷歌重定向 ,如果我在法語打開我的新網站,並從舊網站重定向 是英文(這意味着在URL中有沒有 語言即「en」)鏈接將指向法語版本)。

是的,這是Sitecore的工作方式,它使用cookie來保留最後選擇的語言,但上下文語言按以下順序設置。您最初的訪問將設置語言cookie。

  1. sc_lang查詢字符串參數。
  2. 請求的URL中路徑中的語言前綴。
  3. 與上下文網站關聯的語言cookie。
  4. 與上下文邏輯站點關聯的默認語言。
  5. 在web.config中指定的DefaultLanguage設置。

Overriding Sitecore’s Logic to Determine the Context Language

如果你真的不想要的語言瀏覽器會話之間持續存在,然後用自己的邏輯覆蓋Sitecore.Pipelines.HttpRequest.LanguageResolver管道要麼不設置cookie(在這種情況下,你是完全依靠要求URL)或設置一個cookie,當瀏覽器關閉時這個cookie會過期。您可以從this blog post中找到一個示例,以及之前鏈接的John West博客文章中的示例。

如果您唯一關心的是Google索引,那麼我可能不會做任何更改,除了在包含語言(包括語言在內的完整URL)上的canonical link tags添加在網頁上(對於每種語言版本,這顯然會有所不同)。

<link rel="canonical" href="http://www.abc.com/en/xyz.aspx"/> 
+0

舊網站是靜態的經典asp網站。因此,選擇了文件系統語言 – Sam

+0

誰,用戶瀏覽網站的文件系統語言?如果用戶訪問該網站並希望以不同語言瀏覽,他們無法做到這一點? – jammykam

+0

是的,他們可以,我們在網站上用法語和西班牙語切換按鈕,導致特定語言 – Sam

0

看看Sitecore.Pipelines.PreprocessRequest.StripLanguage ... 我會覆蓋此一個,如果沒有語言使用現有的功能,我會回到默認的連接找到。

0

您可以使用URLOptions爲此,請參見下面的代碼 -

protected UrlOptions URLOptions 
     { 
      get 
      { 
       if (urlOptions == null) 
       { 
        urlOptions = new UrlOptions() 
        { 
         LanguageEmbedding = LanguageEmbedding.Always, 
         AddAspxExtension = false 
        }; 
       } 
       return urlOptions; 

      } 
     } 

請傳遞的getURL此URloption對象()函數,它會工作。

LinkManager.GetItemUrl(ITM,URLOptions)

0

可以實現由Sitecore的設置此功能。

enter image description here

請參考上面的截圖。將languageEmbedding屬性更改爲始終爲asNeeded此設置在Sitecore.config文件中完成。請讓我知道這是否有助於您滿足您的要求。