问题描述
我有使用路由的Angular应用程序,该应用程序已构建并部署到S3存储桶。如果我转到应用程序URL的根目录,则效果很好。例如www.my-app.com.s3.foo.bar.amazonaws.com/
它在应用程序中运行良好。例如,如果我跟随一个指向['/ home']的路由器链接,它会转到www.my-app.com.s3.foo.bar.amazonaws.com/home
,依此类推。
但是,如果我直接进入www.my-app.com.s3.foo.bar.amazonaws.com/home
,则会收到S3错误消息,表明资源不存在。的确如此-S3存储桶中没有与/ home对应的文件。
如何确保URL请求是通过应用而不是S3路由的?
更新:看来CloudFront可能会这样做。我要在CloudFront中配置什么?
解决方法
您可以通过返回SPA的相应根页面,将CloudFront配置为处理S3透视图中的“未找到”页面。
- 创建您的CloudFront发行版。
- 转到分发配置中的“错误页面”标签,然后添加一个新的错误页面。
- 您从CloudFront角度处理的错误是404错误,请在HTTP错误代码字段中输入404。
- 选择自定义响应,然后为您的应用输入html根HTML页面的位置(在S3存储桶中),例如/index.html。
- 从浏览器的角度来看,这是有效的请求和响应,因此在“ HTTP响应代码”字段中输入200。