gpt4 book ai didi

amazon-s3 - 从 S3 cloudfront 静态网站重定向中删除 root/

转载 作者:行者123 更新时间:2023-12-05 08:41:28 25 4
gpt4 key购买 nike

我有一个指向不同域的静态 S3 网站:https://www.externaldomain.com/id12345

此 S3 分配给 CloudFront,然后分配给 mydomain.com

的 A 记录

结果是,当我导航到 mydomain.com 时,它会将访问者重定向到 https://www.externaldomain.com/id12345

一切正常,除了它重定向到 https://www.externaldomain.com/id12345/,最后是 /

如何在不使用 /

的情况下准确重定向到 https://www.externaldomain.com/id12345

我无法控制 externaldomain.com,当包含 / 时它给出 404。

最佳答案

当您选择将所有请求重定向到另一台主机的选项时,S3 假定您希望在新 URL 的末尾保留原始请求路径。请求 URI 始终以 / 开头,所以当 S3 将传入的请求 URI 附加到您在生成重定向时提供的路径时,有 /根据您最后的要求。 S3 与其说是添加,不如说是从传入的请求 URI 中复制它。

所以这种行为乍看之下令人困惑,但并非不正确。

你在评论中说你想做的是,不管路径如何,把它扔掉。所有请求都转到目标服务上的单一路径。

为此,使用路由规则。选择“使用此存储桶托管网站”,然后为索引文档起一个名称——对于此用例您实际上不需要一个名称,但该字段不是可选的,因此只需输入 index.html .然后,添加如下所示的重定向规则:

<RoutingRules>
<RoutingRule>
<Condition>
<KeyPrefixEquals></KeyPrefixEquals> <!-- empty string matches all requests -->
</Condition>
<Redirect>
<Protocol>https</Protocol>
<HostName>other-site.example.com</HostName>
<ReplaceKeyWith>12345</ReplaceKeyWith> <!-- new path, with *no* leading slash -->
</Redirect>
</RoutingRule>
</RoutingRules>

参见 Advanced Conditional Redirects在 S3 开发人员指南中了解更多关于路由规则语法的信息。

文档没有提到使用空的 <KeyPrefixEquals>匹配所有请求,但这有效,因为您要求规则测试的是(伪代码)left(key,0) == '' ,这当然总是正确的。

同样不明确的是,按照惯例,S3 对象键不以 / 开头。 (在 HTTP 中使用的前导 / 在概念上是在对象键的第一个字符之前)。这就是为什么 <ReplaceKeyWith>并且任何其他关键引用不需要(也不应该有)领先的 /在重定向路由规则中。


最佳做法建议您忽略以下供您考虑的替代解决方案。它在很多方面都是可怕的、hacky 和错误的,但它应该适用于许多应用程序......

像您最初所做的那样使用“重定向请求”选项,但将 #在您提供的路径的末尾。然后 S3 重定向到 https://example.com/12345#/或者,更准确地说,https://example.com/12345#${original_uri} .因为#标记 URI 片段的开始,它不会发送到目标服务器,所以它也应该做你想做的,尽管它可能与 SPA 路由器交互,如果那是你正在使用的。

关于amazon-s3 - 从 S3 cloudfront 静态网站重定向中删除 root/,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49742793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com