问题 如何处理Angular中的深层链接?


对此有很多疑问。我已经浏览了好几天了。我尝试了一切,但都没有奏效。是的,我也检查了angular.io,这也没用。所以,请问有人能提出最终答案,还是指出一个我可能还没看过的答案?

这是一个URL,一个名为Angular应用程序的深层链接 whatever 和它的 someroute 带参数的路线。

http://somedomain.com/whatever/someroute/123456

当然它会导致404错误。必须配置Web服务器。我的服务器运行nginx,我做了这个:

location / {
     try_files $uri $uri/ /whatever/index.html;
}

现在它将此服务器上每个站点的404错误重定向到我的Angular应用程序,但这是次要问题。问题是路线仍然不想开始。默认情况下 / 每次都调用route,而不是 /someroute/123456

而不是指向我可能已经看过和尝试过的各种教程,有人可以简单地解释一下我错过了什么微不足道的观点吗?


7728
2017-07-01 19:41


起源

通过fb @ aravind2109与我联系并详细说明您的所有问题。 - Aravind
您希望能够通过链接转到角度应用程序路线而不是从应用程序导航? - LLL
对,就是这样。用户应该能够通过直接链接访问Angular应用程序中的深层链接。例如,通过在收到的电子邮件中单击指向注册确认的链接。 - Tamás Polgár


答案:


你可以切换到HashLocationStrategy,即

RouterModule.forRoot(appRoutes, {useHash: true});

这导致所有应用网址都是index.html,后跟“#”,然后是路由信息。

由于您始终使用index.html,因此无论路由如何,您都不会获得任何有效URL的404。


3
2017-10-29 13:26





听起来你可能错过了 <base href=""> 标签。此标记告诉Angular路由器您的应用程序的基本URI是什么。如果不存在,那么Angular会假设初始导航URI(在您的情况下, /whatever/someroute/123456)是基URI,所有后续路由都将相对于该URI执行。

尝试包括 <base href="/whatever/"> 在里面 <head> 你的元素 index.html 相应地引导路由器。

你也可以控制 <base href=""> 元标签通过 ng build 如果您使用的是Angular CLI:

ng build --base-href '/whatever/'

7
2017-10-24 21:56



为了记录,OP可能会使用此解决方案或@ GreyBeardedGeek的解决方案来解决他的问题。这个解决方案将允许他继续使用 pushState 方法,而@ GreyBeardedGeek的解决方案将使他的页面使用 location.hash 方法。有关这些方法的更好比较,请参阅 这个StackOverflow问题。 - Mike Hill