具有Lambda的CloudFront重定向请求为尾随斜杠

时间:2017-07-26 17:35:07

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

我有一个静态SPA页面,它使用S3作为CloudFront的原点。如果我访问www.domain.com/page,我会得到前缀为bucket-directory/prod/page/的CloudFront路径。

是否可以捕获AWS Lambda中的路径并将尾部斜杠附加到请求,因此它变为www.domain.com/page> Λ> 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

2 个答案:

答案 0 :(得分:1)

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

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

要获得快速启动功能,您可以查看这篇文章https://tinyendian.com/articles/better-origin-response-function-for-cloudfront-hosted-static-pages,说明您可以从此处复制的实际代码https://gist.github.com/karolmajta/6aad229b415be43f5e0ec519b144c26e

当然,随着您的应用更改,您可能需要在此处修改此代码段以满足您的需求。

答案 1 :(得分:0)

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

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

此外,您需要确保模式按以下顺序排列, bucket-directory / prod / page< - 这将使lambda执行重定向 斗目录/ PROD /页/

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

或者您可以编写一个Lambda函数,该函数可以获取URL并修改URL以在其不存在时附加斜杠并将请求转发给原点。

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

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

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

文档链接应该有所帮助。