amazon-web-services - 通过 Route 53 的 S3 静态网站。如果路径不存在,则重定向到页面

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

我一直在学习通过 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/

相关文章:

node.js - AWS EC2,pm2 : Cannot see pm2 running list

amazon-web-services - Redshift COPY 错误 1206 无效时间戳

java - Amazon Cognito 连接找不到 IdentityPool

javascript - ng-click - 单击后执行功能并重定向

Python:Amazon S3 无法获取存储桶:表示 403 Forbidden

amazon-web-services - SQS 收到消息后自动删除 Lambda

apache - 将大量旧 URL 重定向到新 URL 的最佳方法?

将IP地址重定向到域名

javascript - AWS S3 - 我们计算的请求签名与您提供的签名不匹配。检查您的 key 和签名方法

amazon-s3 - CloudFront 未正确从 S3 传回 Access-Control-Allow-Origin header