S3静态网站托管:是否可以在重定向规则中向目标网址添加多个查询字符串参数?

时间:2018-01-31 05:57:49

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

我目前在S3上托管一个静态网站,它使用重定向规则将请求重新路由到lambda函数。

问题是我有两个桶,它们都充当静态网站(沙箱与生产),我需要能够将它们指向相同的lambda函数,但能够区分它们当函数运行时。无论是标题,GET参数,字符串操作,还是我可以用来确定请求来自哪个存储桶的任何内容。

有没有人知道lambda函数内部如何识别请求来自一个桶而不是另一个桶?这是我正在使用的当前重定向规则:

<RoutingRules>
  <RoutingRule>
    <Condition>
      <KeyPrefixEquals/>
     <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
    </Condition>
    <Redirect>
      <Protocol>https</Protocol>
      <HostName>removed.execute-api.us-east-2.amazonaws.com</HostName>
      <ReplaceKeyPrefixWith>prod/func?key=</ReplaceKeyPrefixWith>
      <HttpRedirectCode>307</HttpRedirectCode>
    </Redirect>
  </RoutingRule>
</RoutingRules>

根据我的理解,我无法在此路由规则集中设置和标题或GET参数,因为规则的验证失败,我唯一的选择就是复制lambda函数,我真的不这样做想要做,因为它感觉很冗长。

我还在JSON.stringify()&amp;上完成了event。 Lambda函数中的context个参数似乎无法看到任何项目来帮助我唯一地标识原始存储桶。

感谢您的任何帮助。

1 个答案:

答案 0 :(得分:3)

如果要添加查询字符串(“GET”)参数,则必须记住这是一个XML文档,需要转义&&amp;。通过这种方法,S3仍然可以在重定向中正确呈现查询字符串。

无效:

<ReplaceKeyPrefixWith>prod/func?foo=bar&buzz=fizz&key=</ReplaceKeyPrefixWith>

有效:

<ReplaceKeyPrefixWith>prod/func?foo=bar&amp;buzz=fizz&amp;key=</ReplaceKeyPrefixWith>