为 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

使用 Nginx 使用 try_files 将所有对不存在文件的请求重写为 index.php

删除 404 重定向上的所有 url 参数

CodeIgniter 使 .htaccess 为 index.php 返回 404