2012-03-28 78 views
1

人們,我正在開發一個多語言內容的網站,搜索引擎優化是一個非常高的優先級。Asp.net多語言網站 - 單獨的目錄與URL路由

我設法讓我的網站,通過asp.net URL路由,以顯示不同的URL顯示根據所選擇的語言site.com/ar和site.com/en並能正常工作.apsx頁上的根目錄。但是,這不適用於子目錄(例如site.com/en/Account/Login.aspx)中的頁面,我花了數天的時間嘗試使我的URL路由與我的子目錄一起工作,但我無法使其與子目錄。

所以,從易路的觀點是它更好地具有不同的物理目錄/ Ar和/ EN對我的根目錄與內容不同的網頁爲每種語言。這也是首選,因爲/ ar頁面的佈局完全水平翻轉,因爲ar =阿拉伯語=從右到左的語言。

請分享您對這種方法的優點缺點的看法。

回答

1

即使在子目錄中,基於URL的方法也應該可以正常工作。因爲你提到「子目錄」而不是「控制器/動作」,我假設你的應用程序是用ASP.NET WebForms而不是MVC實現的。

如果是這樣的話,你的URL重寫你的請求在您的Application_BeginRequest

public void Application_BeginRequest(object sender, EventArgs e) 
    { 
     HttpApplication app = (HttpApplication)sender; 
     HttpContext ctx = app.Context; 

     string PathAndQuery = ctx.Request.Url.PathAndQuery; 

     // parse the PathAndQuery and if it is of the form 
     // en/Subdir1/Subdir2/resource.aspx 
     // split it into [en] (virtual part) and [Subdir1/Subdir2/resource.aspx] (physical part) 

     string VirtualPart = GetVirtualPart(PathAndQuery); 
     string PhysicalPart = GetPhysicalPart(PathAndQuery); 

     ctx.RewritePath(PhysicalPart); 
    } 

通過這種方法,你必須在文件系統和形式en\Subdir1\Subdir2\resource.aspx的請求你的物理結構被正確地路由到Subdir1\Subdir2\resource.aspx

雖然示例顯示手動重寫,但如果它符合您的需要,則可以使用任何現有的重寫技術。

這只是爲了讓你開始。但是,如果您在實施網址重寫時遇到任何具體問題,我認爲您必須提出其他具體問題,以便人們可以幫助解決具體問題。如果你只是說我已經花了幾天的時間,它不起作用那麼它是不可能的,以幫助你與你的具體做法。

0

就個人而言,我會避開物理目錄,並採用路由方法。未來添加語言會更容易,如果您發現需要支持文化(en-US,en-CA,en-GB等),您可以輕鬆引入默認文化(。如果沒有en-GB資源,默認爲en-US),而不是創建資產的第二個物理副本。我曾在大型網站上重複本地化目錄下的文件。隨着您添加語言,它開始快速受傷。

至於與路線和子目錄的問題,你可以嘗試把一個恆定的路線,因爲這使得它更容易的URL匹配的模式。我使用 'X' 在這裏:

routes.Add("LocalisedRoute", new Route 
    (
     "{lang}/X/{path}" 
     , new IRouteHandler() 
    )); 

現在,這兩條路徑應該匹配:

  • site.com/en/X/Account/Login.aspx
  • site.com/ EN/X/Default.aspx的

,如果你把在@TonyStark的鏈接中列出的做法,可能沒有必要,但總的來說,我發現加上一個常數,在路線擺弄時是有用的過去。

編輯:請注意,Google's recommendation是使用每個語言的子域,例如。 en-US.site.com。