我一直在遵循AWS教程,以通过Route 53在S3中创建静态网站。我已经创建了基本网站,设置了S3存储桶,并将DNS区域设置为Alias to Bucket。我的问题是,如果子域不存在,我将无法重定向到页面。
由于某种原因,我找不到解决此问题的指南。如果我输入正确的网站www.mynewsite.com(示例),它将正确转到该页面。我正在尝试做的是允许将www.mynewsite.com/test之类的URL重定向回www.mynewsite.com,而不是找不到404。有没有办法做到这一点?甚至AWS教程页面也将有所帮助。
答案 0 :(得分:1)
在这种情况下,我通常要做的是将索引文档设置为index.html,然后将错误文档也设置为index.html-任何404都将直接重定向回您的主页。
尝试一下,等待大约3分钟,它应该可以工作。
答案 1 :(得分:1)
解决方案是使用{3}的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>
。