如何替换来自S3静态网站“路由路由”的响​​应,而不是重定向?

时间:2018-11-04 21:55:19

标签: amazon-web-services amazon-s3

Amazon S3存储桶可以托管静态网站,与托管完整的服务器相比,这非常有用且具有成本效益。它具有一项功能,您可以在其中指定index.html,404.html和重定向规则。我在问重定向规则。

是否可以替换密钥而不重定向?

下面的示例有效。当用户访问www.example.com时,将向他们提供index.html页面(并且浏览器的URL不变)。当他们请求不存在的URL时,将为404.html文件提供服务(并且浏览器的URL不变)(这很重要)

在下面的示例中,我指定了重定向规则。当用户点击此按钮时,浏览器的URL就会更改。 curl命令显示S3发送回301重定向。好的。这就是规则所说的-(它说Redirect

但是我不想一直重定向。有时,我希望保留网址,但提供另一个页面。 (类似于404页面)

实际示例:

  • 如果用户点击/products/475872.html,我希望他们看到475872.html页(始终有效)
  • 如果用户点击/ products / spiderman-action-figure,我希望他们看到475872.html页,并且我不想更改浏览器的URL。

目前在S3中似乎无法实现。可能吗?这是我的问题。

{
    "Bucket": "www.example.com",
    "WebsiteConfiguration": {
        "ErrorDocument": {
            "Key": "404.html"
        },
        "IndexDocument": {
            "Suffix": "index.html"
        },
        "RoutingRules": [
            {
                "Condition": {
                    "KeyPrefixEquals": "products/spiderman-action-figure"
                },
                "Redirect": {
                    "ReplaceKeyWith": "475872.html"
                }
            }
        ]
    }
}

Related SO Question

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,这就是我解决的方法。

将S3存储桶指向CloudFront并重写请求模式。

enter image description here

在路径模式中,

  

/ products / spiderman-action-figure指向您的来源   /products/475872.html(S3存储桶URL)

后来我们通过代码修改的更清洁的解决方案是使用Lambda @ Edge。

https://docs.aws.amazon.com/lambda/latest/dg/lambda-edge.html

enter image description here

与URL原点更改请求关联的Lambda函数请求将为viewer request

此处包含实施示例。

https://aws.amazon.com/blogs/networking-and-content-delivery/dynamically-route-viewer-requests-to-any-origin-using-lambdaedge/

希望有帮助。

答案 1 :(得分:0)

这对于S3路由规则是不可能的。

它们只能用于生成重定向。