我试图通过使用行为将路由到正确的S3存储桶来在现有CloudFront发行版上托管SPA。我遇到的问题是CloudFront发行版具有特定的404页设置。我无法将其指向我的S3存储桶中的index.html,并且不能选择创建单独的分发,因为它需要使用不支持的同一CNAME。如果我将整个发行版404页面指向S3存储桶中的index.html文件,则它可以工作,但是父站点的所有404错误都路由到我的SPA。
由于404问题,我的应用在处理错误时无法正确路由。我有什么选择?我熟悉AWS的基础知识,但是是否有更高级的解决方案?
答案 0 :(得分:-1)
使用自定义错误页面
如果将SPA的S3存储桶配置为S3 origin
,CloudFront将使用存储桶的REST API端点,这将导致403错误而不是404错误。
然后您可以在CloudFront中自定义403错误页面。
使用Lambda @ Edge
您可以使用Origin Request Lambda@Edge函数将URL重写为/index.html
,该行为将请求转发到SPA:
const path = require('path');
exports.handler = (event, context, callback) => {
const { request } = event.Records[0].cf;
// Rewrite uri without extensions only
// Will rewrite /blabla to /index.html but not /abc.txt or /xyz.css
if (!path.extname(request.uri)) request.uri = '/index.html';
callback(null, request);
};
此解决方案的优点是不修改HTTP状态代码(仍为200)。