如何禁用 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 将 403
和 404
错误页面指向 /index.html
(基于 this 方法)。
设置 CloudFront 错误页面后,我从存储桶中删除了重定向规则,甚至从存储桶中删除了错误文档。但是,S3 继续使用重定向规则并在我的路由前加上 #!/
.
如何强制重定向规则停止运行?
CloudFront 失效针对的是浏览器实际请求的路径,而不是从源(后端)服务器请求的路径。
使 /
无效可能在这种情况下有效,但 /*
会使所有内容无效。使用 /index.html
(如果不这样做,控制台会无形地添加前导 /
)只会在 浏览器 直接请求 /index.html
.
CloudFront 接受无效请求,即使它们不匹配任何内容,因为无效请求本质上是一个指令,用于确保缓存中没有匹配的对象。当无效请求完成时,该条件为真——此时没有匹配的对象。不管它们是被清除了还是从未存在过,可以说无效请求已经成功,因为它们现在已经消失了......但是这样做的副作用是如果你使一些已经失效的东西无效,你不会收到警告从来没有。
我有一个托管 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 将 403
和 404
错误页面指向 /index.html
(基于 this 方法)。
设置 CloudFront 错误页面后,我从存储桶中删除了重定向规则,甚至从存储桶中删除了错误文档。但是,S3 继续使用重定向规则并在我的路由前加上 #!/
.
如何强制重定向规则停止运行?
CloudFront 失效针对的是浏览器实际请求的路径,而不是从源(后端)服务器请求的路径。
使 /
无效可能在这种情况下有效,但 /*
会使所有内容无效。使用 /index.html
(如果不这样做,控制台会无形地添加前导 /
)只会在 浏览器 直接请求 /index.html
.
CloudFront 接受无效请求,即使它们不匹配任何内容,因为无效请求本质上是一个指令,用于确保缓存中没有匹配的对象。当无效请求完成时,该条件为真——此时没有匹配的对象。不管它们是被清除了还是从未存在过,可以说无效请求已经成功,因为它们现在已经消失了......但是这样做的副作用是如果你使一些已经失效的东西无效,你不会收到警告从来没有。