【发布时间】:2017-08-03 13:18:15
【问题描述】:
我目前正在开发一个带有 Angular4 前端的应用程序。我的生产目标是让前端作为来自 AWS S3 存储桶的静态内容。
一切都在处理一个异常,这实际上是应用程序的一个主要问题。当用户注册时,他们会收到一封电子邮件,其中包含用于验证其电子邮件地址的链接。链接格式如下:
https://myhostname.com/user/userguid?token=tokenvalue
由于前端是静态内容,实际只存在页面index.html,所以点击这个链接会产生404。
现在,经过一番研究,我采取了以下步骤。在 S3 中,我有以下路由规则。
<RoutingRules>
<RoutingRule>
<Condition>
<HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
</Condition>
<Redirect>
<HostName>myhostname.com</HostName>
<ReplaceKeyPrefixWith>#!/</ReplaceKeyPrefixWith>
</Redirect>
</RoutingRule>
</RoutingRules>
我还有一个 CloudFront 规则将所有 404 错误重定向到 index.html。
现在,当有人导航到 myhostname.com/user/userguid?token=tokenvalue 时,URL 会重新写入 myhostname.com/#!/user/userguid?token=tokenvalue,但随后用户会被重定向到myhostname.com/home(又名 index.html)。
我可以对我的 Angular 应用程序进行哪些更改以获取哈希/片段的值并实际路由到该组件(而不是只是重定向,这会将用户发送回 index.html)?
请注意,在开发中,当前端通过“npm start”提供服务时,这工作得很好。谢谢大家。
【问题讨论】: