为 S3 上的所有 404 请求返回 index.html,而不是重定向
Posted
技术标签:
【中文标题】为 S3 上的所有 404 请求返回 index.html,而不是重定向【英文标题】:Returning index.html for all the 404 requests on S3 instead of redirecting 【发布时间】:2018-09-22 20:21:48 【问题描述】:在单页应用程序中,通常会使用路由机制,其中所有内容都保存在index.html
中,javascript 通过在浏览器中显示正确的内容而不是实际发送任何请求来管理 URL 寻址。唯一的要求是在服务器端,所有指向不存在条目的 URL 都应该返回 index.html
页面。我正在尝试用 S3 做到这一点。
所以,长话短说,我已经设置了一个 S3 存储桶来保存我网站的静态内容,我什至通过在 桶的重定向规则:
<RoutingRules>
<RoutingRule>
<Condition>
<HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
</Condition>
<Redirect>
<ReplaceKeyWith></ReplaceKeyWith>
</Redirect>
</RoutingRule>
</RoutingRules>
并且还授予公众列出该存储桶项目的权限。所以一切看起来都很好,但事实并非如此。
使用给定的规则,我要求 AWS 将我的所有请求重定向到 /
,而我需要的是 AWS 应该为任何不匹配现有 URL 的 URL 返回(不重定向)index.html
的内容文件。
这可能吗?有谁知道如何为所有指向不存在文件的 URL 返回index.html
?
【问题讨论】:
【参考方案1】:您可以将所有4XX
错误重定向到index.html
,方法是将其放在静态网站托管下的错误文档配置中。
参考:https://serverless-stack.com/chapters/create-an-s3-bucket.html#enable-static-web-hosting
【讨论】:
尽管这样可行,但我希望会有更好的解决方案,因为响应仍然是404
。谢谢。
为此,您可以添加 CloudFront 分配:serverless-stack.com/chapters/…以上是关于为 S3 上的所有 404 请求返回 index.html,而不是重定向的主要内容,如果未能解决你的问题,请参考以下文章
S3 存储桶找不到 index.html,给我一个 404 错误
部署在 Amazon s3 上的 Angular 2 应用程序出现 404 错误
在 Apache 代理后面为 S3 静态网站 JS 获取 404