【问题标题】:CloudFront redirect request with Lambda to trailing slashCloudFront 使用 Lambda 将请求重定向到斜杠
【发布时间】:2018-01-02 04:26:31
【问题描述】:

我有一个静态 SPA 页面,它使用 S3 作为 CloudFront 的来源。如果我访问 www.domain.com/page,我将得到前缀为 bucket-directory/prod/page/ 的 CloudFront 路径,这是预期的。

是否可以在 AWS Lambda 中捕获路径并将尾部斜杠附加到请求中,所以它变成 www.domain.com/page > [Lambda] > www.domain.com/page/

我一直在寻找并尝试以下资源,但收效甚微: http://blog.rowanudell.com/redirects-in-serverless/

http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-create-api-as-simple-proxy-for-lambda.html

【问题讨论】:

    标签: amazon-web-services amazon-s3 aws-lambda amazon-cloudfront


    【解决方案1】:

    在 Cloudfront 上为 SPA 或静态页面进行完美设置并非易事。简而言之,您将需要(至少)为您的 CF 发行版使用原始请求 lambda 函数设置。您需要处理一些边缘情况,例如:

    • 哈希
    • 重定向到带有斜杠的网址(您提到的)
    • 重定向时查询参数的转发

    对于快速启动功能,您可以查看这篇文章 https://tinyendian.com/articles/better-origin-response-function-for-cloudfront-hosted-static-pages 解释您可以从这里复制的实际代码 https://gist.github.com/karolmajta/6aad229b415be43f5e0ec519b144c26e

    当然,随着您的应用程序发生变化,您可能需要在这里和那里修改此 sn-p 以满足您的需求。

    【讨论】:

      【解决方案2】:

      您可以通过两种方式做到这一点。

      在 CloudFront 模式中,您可以检查 bucket-directory/prod/page 并使用 lambda 重定向到 bucket-directory/prod/page/。

      您还需要确保模式按以下顺序排列, bucket-directory/prod/page

      页面将根据您的命名约定进行正则表达式。

      或者您可以编写一个 Lambda 函数,该函数可以获取 url 并修改 url 以附加斜杠(如果不存在)并将请求转发到源。

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

      Lambda Edge 将使它更容易并避免重定向。

      使用 Lambda Edge,您也可以从 bucket-directory/prod/page 更改为 bucket-directory/something/someotherpage。

      文档链接应该会有所帮助。

      【讨论】:

        猜你喜欢
        • 2020-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-19
        • 2013-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多