2017-07-06 55 views
-1

簡而言之,我們希望將舊鏈接重定向到我們的新路線。我知道如何用app-routes.ts來做到這一點,但是,它並不是正好的工作。例如:從.NET遷移到angular2:如何重定向舊(絕對)鏈接?

export const ROUTES: Routes = [ { path: 'my-loads', component: MyLoadsComponent, canActivate: [AuthGuard] }, { path: 'Applications/LoadBoard/CarrierBoard.aspx', redirectTo: 'my-loads' } ]

此重定向的實際工作,但只有當用戶試圖訪問/#/Applications/MyApp/Controller.aspx(與哈希),但如果用戶試圖訪問/Applications/MyApp/Controller.aspx(無亂碼,這是URL用戶將無法正常工作將書籤)。

這是因爲webpack/angular2顯然使用相對 URL來加載所有使用該站點所需的腳本。它試圖加載script.bundle.js而不是/script.bundle.js,所以它試圖加載/Applications/MyApp/script.bundle.js。在這種情況下,如果您嘗試訪問除root以外的絕對URL,則所需的腳本只有404s,因此沒有任何腳本運行,並且您將看到「Loading ...」,而沒有其他任何內容。

我知道這種編譯的想法是允許用戶構建不駐留在根文件夾中的webapps。這是一個好主意,但它阻止了我們重定向舊網址。在angular2中實現這些重定向有沒有(正確的)方法?

回答

0

<base href="/">添加到HTML <head>標記可修復有關嘗試從錯誤路徑加載腳本的問題。

爲了得到重定向正確的,我們必須刪除我們的路線哈希在我們app.module.ts,改變RouterModule線

(RouterModule.forRoot(ROUTES, { useHash: false }) 
+0

我還在研究如何讓基本HREF是與環境相關的,而不是路線硬編碼。幸運的是,基礎href應該在每個開發人員的環境中,以及分段和生成,但我仍然希望這是一個環境變量。 –