代码之家  ›  专栏  ›  技术社区  ›  Soviut

如何禁用S3 bucket重定向规则?

  •  0
  • Soviut  · 技术社区  · 5 年前

    我有一个S3 bucket,它托管一个Vue应用程序,该应用程序使用启用了历史模式的Vue路由器。最初,我制定了以下重定向规则来解决S3无法解析“虚拟”路由的问题(基于 this 方法)。它用散列语法作为路径的前缀,页面上的脚本使用 history.pushState() 将其转换回历史模式可以理解的非哈希路径。

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

    然而,更现代的方法是让CloudFront通过指向 403 404 错误页位于 /index.html (基于 this 方法)。

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

    如何强制重定向规则停止操作?

    0 回复  |  直到 5 年前
        1
  •  1
  •   Michael - sqlbot    5 年前

    CloudFront无效处理的是浏览器实际请求的路径,而不是从原始(后端)服务器请求的路径。

    无效 / 在这种情况下可能有用,但是 /* 使一切无效。使用 /index.html (控制台无形中增加了前导 / 如果你没有)只会在 浏览器 直接请求 /index.html索引 .

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