2017-07-06 48 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应该在每个开发人员的环境中,以及分段和生成,但我仍然希望这是一个环境变量。 –