2017-04-25 29 views
0

在我的一把umbraco的網站時頁面,是否有可能強制重定向到默認的多語言頁面的所有頁面,如果有人試圖訪問該頁面沒有它的多語言部分?力文化/ multilang請求非培養

下面是一個例子:

website.com/en/news 
website.com/da/news 

如果有人試圖訪問:

website.com/news 

應該重定向到默認區域性頁面,而不是:

website.com/en/news 

我猜的東西像這應該是相當容易的(因爲我認爲這是大多數用戶想要的東西),但我無法弄清楚 怎麼樣。

+0

是/新聞是真實的網頁,還是所有網站內容在/ en和/ da下面? – Tim

+0

@Tim所有頁面都在文化之下。 – MortenMoulder

+0

還有一個簡單的問題,您現在的解決方案代碼在哪裏運行?它是一個ContentFinder或其他東西? – Tim

回答

0

所以我最終作出一個可怕的修復,直到我得到一個更好的「答案」。它是這樣的:

var culture = HttpContext.Current.Request.Url.AbsolutePath.Split('/')[1]; 
if (culture != "en" && culture != "da") 
{ 
    var shortCulture = "en"; 

    var languages = HttpContext.Current.Request.UserLanguages; 

    //Just making sure 
    if (languages != null && languages.Length > 0) 
    { 
     shortCulture = languages[0].Trim().Substring(0, 2); 

     //If the culture is something like fr (French), we default back to en 
     if (shortCulture != "en" && shortCulture != "da") 
     { 
      shortCulture = "en"; 
     } 
    } 
    Uri uri = new Uri(HttpContext.Current.Request.Url.AbsoluteUri); 
    var url = uri.Scheme + Uri.SchemeDelimiter + uri.Host; 
    url += "/" + shortCulture + HttpContext.Current.Request.Url.AbsolutePath; 
    Response.RedirectPermanent(url); 
} 

所以基本上,如果我嘗試要求:

https://website.com/news 
http://website.com/news 
website.com/news 
http://website.com/news/some-news-article/ 
etc. etc. 

會重定向。例如:

https://website.com/news/ 
| 
V 
https://website.com/en/news/ 

(這取決於您的區域設置)。

太可怕了,太可怕了,太可怕了。我很慚愧。

0

OK,所以在一把umbraco 7,您可以用ContentFinder做到這一點。這是作爲內容管道的一部分運行的,它將嘗試查找Umbraco本身無法找到的內容。

有兩個部分內容取景器,實際本身ContentFinder,然後你必須電線它在上一把umbraco應用程序啓動事件。我已經做了類似於你正在嘗試的東西,但相反(我的所有內容都在/內容中,但我使用/ en-en /內容等虛擬URL,並將所有內容映射回內容查找器中) 。

有關ContentFinders信息,請查看文檔:https://our.umbraco.org/documentation/reference/routing/request-pipeline/icontentfinder

這裏有一個要點,我發現,做幾乎你以後:https://gist.github.com/alindgren/4f8e47d9b2d769137be3

一個ContentFinder的優點是,它只會變得運行找不到的內容,而不是像現在的解決方案那樣在每個頁面上加載,從而使其效率更高!

希望有幫助!

:)