我正在尝试设置一个S3存储桶来处理一组动态链接,然后重新定向它们。传入链接的结构类似deeplink.s3-website-eu-west-1.amazonaws.com/link1
,我喜欢指向deeplink.s3-website-eu-west-1.amazonaws.com?url=link1
。这是否可以在重定向规则中使用?
答案 0 :(得分:5)
如果您希望S3从/link1
重定向到?url=link1
,那么就可以执行此操作:
<RoutingRules>
<RoutingRule>
<Condition>
<KeyPrefixEquals></KeyPrefixEquals>
<HttpErrorCodeReturnedEquals>403</HttpErrorCodeReturnedEquals>
</Condition>
<Redirect>
<HostName>target.example.com</HostName>
<ReplaceKeyPrefixWith>?uri=/</ReplaceKeyPrefixWith>
</Redirect>
</RoutingRule>
</RoutingRules>
这里的逻辑是,如果密钥前缀是零长度字符串,它始终是 - 每个字符串的最左边的0个字符是空字符串,无论字符串包含什么 - 并且错误代码将如果你没有给匿名用户许可列出对象(你不应该这样做)然后将?uri=/
添加到密钥 - 那么它总是用于丢失对象 - 技术上,我们要求S3通过使用我们的前置字符串“替换”键中最左边的0个字符来执行此操作(同样,记住S3键实际上没有前导斜杠,所以在我的情况下,我添加/
- 如果你不想使用前导斜杠,只需使用?uri=
)并重定向到目标主机。
在这个问题中,你提到重定向到同一个桶 - 不知道那会对你做什么,因为S3不会对该查询字符串做任何事情,并且在我的应用程序中,我重定向到另一个站点 - - 但是这个路由规则会执行您尝试执行的操作。
另一方面,如果您希望S3将?url=link1
重定向到/link1
,那么使用路由规则是不可能的,因为它们不会处理查询字符串。