我一直在学习通过 Route 53 在 S3 中制作静态网站的 AWS 教程。我已经制作了基本网站,设置了 S3 存储桶,并将 DNS 区域设置为存储桶的别名。我的问题是,如果子域不存在,我无法重定向到该页面。
出于某种原因,我找不到解决此问题的指南。如果我输入正确的网站 www.mynewsite.com (示例),它将正确进入该页面。我想做的是允许像 www.mynewsite.com/test 这样的 URL 重定向回 www.mynewsite.com,而不是 404 未找到。有没有办法做到这一点?即使是 AWS 教程页面也会有帮助。
最佳答案
解决这个问题的方法是 advanced conditional redirect具有 S3 路由规则。
<RoutingRules>
<RoutingRule>
<Condition>
<KeyPrefixEquals></KeyPrefixEquals>
<HttpErrorCodeReturnedEquals>403</HttpErrorCodeReturnedEquals>
</Condition>
<Redirect>
<Protocol>https</Protocol>
<HostName>example.com</HostName>
<ReplaceKeyWith></ReplaceKeyWith>
</Redirect>
</RoutingRule>
</RoutingRules>
这将导致网站端点
将任何会返回 403 的请求重定向回 https://example.com/
...而 403 是 S3 对于不存在的对象默认返回的结果(因为默认情况下,S3 不会通过 404 揭示对象的不存在 - 一切都只是 403 Forbidden
)。
如果您的存储桶过于公开,那么您需要使用 <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
而不是 403,但如果是这种情况,您已允许未经身份验证的调用者列出您的存储桶,您可能应该删除该权限。
如果您使用客户端呈现,并且希望通过在 URI 中提取不存在的页面来跟踪该页面,则可以使用类似 <ReplaceKeyPrefixWith>?x-not-found=/</ReplaceKeyPrefixWith>
的内容。而不是<ReplaceKeyWith></ReplaceKeyWith>
.
关于amazon-web-services - 通过 Route 53 的 S3 静态网站。如果路径不存在,则重定向到页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59219662/