2

简短概述。

我在 S3 存储桶上托管一个 Angular 应用程序。我还有一个 Cloudfront 分发版来处理 HTTPS 和重定向。

我尝试根据用户连接的 URL 形成一个查询字符串参数。

2 个例子

test.example.com --> example.com?id=test
hello.example.com --> example.com?id?hello

到目前为止,我尝试实现一个AWS lambda@Edge 函数,但到目前为止没有任何效果。如果我尝试操纵request它不会有任何影响,如果我试图操纵response重定向不起作用并且我得到一个 S3 存储桶错误或 Cloudfront 错误。

'use strict';
const remove_suffix = '.example.com';
exports.handler = (event, context, callback) => {
    const request = event.Records[0].cf.request;
    const headers = request.headers;
    const host_header = headers.host[0].value;

    if(host_header.endsWith(remove_suffix)){
        request.querystring = 'id=' + host_header.substring(0,host_header.length - remove_suffix.length);
    }

    return callback(null,request);
};

1)我应该使用哪个触发器?

2) Cloudfront 设置中可能缺少哪些设置?

3) 我的 Lambda 函数错了吗?

4

1 回答 1

3

您可能希望确保在 Cloudfront 分发设置Behavior中,选项Query String Forwarding and Caching未设置为None (Improves Caching)

您可以在文档中找到有关该选项的更多信息。

于 2019-07-11T09:08:54.417 回答