我(也许是错误的)假设 lambda@edge 可以修改 origin.responce 内容,所以写了一个像这样的 lambda 函数:
/* this does not work. response.Body is not defined */
'use strict';
exports.handler = (event, context, callback) => {
var response = event.Records[0].cf.response;
var data = response.Body.replace(/OLDTEXT/g, 'NEWTEXT');
response.Body = data;
callback(null, response);
};
Run Code Online (Sandbox Code Playgroud)
这会失败,因为您无法使用此语法引用原始响应主体。
我可以修改此脚本以使其按我的预期工作吗?或者我应该考虑使用 AWS 上的其他服务吗?
我的背景 :
我们正在尝试建立一个 AWS Cloudfront 发行版,以整合对多个网站的访问,如下所示:
ttp://foo.com/ -> https:/newsite.com/foo/
ttp://bar.com/ -> https:/newsite.com/bar/
ttp://boo.com/ -> https:/newsite.com/boo/
Run Code Online (Sandbox Code Playgroud)
这些网站目前由外部机构管理。我们希望禁用对 foo/bar/boo 的直接公共访问,并仅将 newsite.com 作为互联网上唯一可见的站点。
将起源映射到单个 cf 分布相对简单。但是,如果从网络中删除当前域名,这样做会破坏指定具有绝对 url 的文件的 html 内容。
ttp://foo.com/images/1.jpg
-> (disable foo.com dns)
-> image not …Run Code Online (Sandbox Code Playgroud)