通过路线53的S3静态网站。如果路径不存在,请重定向到页面

时间:2019-12-06 20:05:52

标签: amazon-web-services redirect amazon-s3 amazon-route53

我一直在遵循AWS教程,以通过Route 53在S3中创建静态网站。我已经创建了基本网站,设置了S3存储桶,并将DNS区域设置为Alias to Bucket。我的问题是,如果子域不存在,我将无法重定向到页面。

由于某种原因,我找不到解决此问题的指南。如果我输入正确的网站www.mynewsite.com(示例),它将正确转到该页面。我正在尝试做的是允许将www.mynewsite.com/test之类的URL重定向回www.mynewsite.com,而不是找不到404。有没有办法做到这一点?甚至AWS教程页面也将有所帮助。

2 个答案:

答案 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>