如何禁用 S3 存储桶重定向规则?

How to disable an S3 bucket redirect rule?

我有一个托管 Vue 应用程序的 S3 存储桶,该应用程序使用启用了历史记录模式的 Vue Router。最初,我有以下重定向规则来解决 S3 无法解析 "virtual" 路由(基于 this 方法)。它使用页面上的脚本识别和剥离的散列语法为路径添加前缀,使用 history.pushState() 将其转回历史模式可以理解的非散列路径。

<RoutingRules>
  <RoutingRule>
    <Condition>
      <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
    </Condition>
    <Redirect>
      <HostName>mydomain.com</HostName>
      <ReplaceKeyPrefixWith>#!/</ReplaceKeyPrefixWith>
    </Redirect>
  </RoutingRule>
</RoutingRules>

但是,更现代的方法是让 CloudFront 将 403404 错误页面指向 /index.html(基于 this 方法)。

设置 CloudFront 错误页面后,我从存储桶中删除了重定向规则,甚至从存储桶中删除了错误文档。但是,S3 继续使用重定向规则并在我的路由前加上 #!/.

如何强制重定向规则停止运行?

CloudFront 失效针对的是浏览器实际请求的路径,而不是从源(后端)服务器请求的路径。

使 / 无效可能在这种情况下有效,但 /* 会使所有内容无效。使用 /index.html(如果不这样做,控制台会无形地添加前导 /)只会在 浏览器 直接请求 /index.html.

CloudFront 接受无效请求,即使它们不匹配任何内容,因为无效请求本质上是一个指令,用于确保缓存中没有匹配的对象。当无效请求完成时,该条件为真——此时没有匹配的对象。不管它们是被清除了还是从未存在过,可以说无效请求已经成功,因为它们现在已经消失了......但是这样做的副作用是如果你使一些已经失效的东西无效,你不会收到警告从来没有。