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

时间:2019-03-16 00:23:26

标签: amazon-web-services redirect amazon-s3 amazon-cloudfront

我有一个托管Vue应用程序的S3存储桶,该应用程序使用启用了历史记录模式的Vue路由器。最初,我具有以下重定向规则来解决S3无法解析“虚拟”路由的问题(基于this方法)。它为该路径添加了哈希语法的前缀,该哈希语法由页面上的脚本标识和剥离,并使用history.pushState()将其转换为历史模式可以理解的非哈希路径。

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

但是,更现代的方法是通过将403404错误页面指向/index.html(基于this方法)来让CloudFront做到这一点。

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

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

1 个答案:

答案 0 :(得分:1)

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

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

CloudFront甚至接受无效请求,即使它们不匹配任何内容,因为无效请求本质上是确保缓存中没有匹配对象的指令。失效请求完成后,该条件成立-那时没有匹配的对象。不管是否清除了它们,或者从未将它们清除过,都可以说无效请求已经成功,因为它们现在已经消失了……但是,这样做的副作用是,如果您使无效的东西无效,您将不会得到警告。永远不会在那里。