正在从获取客户端请求域Lambda@Edge功能



我正在尝试为HTTP301重定向做如下操作,以便web用户重定向到不同的新闻页面。

if ((request.uri == "/news") || (request.uri == "/news/") && (request.origin.domainName == "sub.mydomain.com")) {

const redirectResponse = {
status: '301',
statusDescription: 'Moved Permanently',
headers: {
'location': [{
key: 'Location',
value: '/local-news/',
}],
'cache-control': [{
key: 'Cache-Control',
value: "max-age=3600"
}],
},
};
callback(null, redirectResponse);

}

然而,似乎是这样的请求origin.domainName="mydomain.com">部分在我的功能中不起作用。这是选择来自哪个客户端的域名的正确方法吗?

我认为这个request.origin.domainName方法将不能作为origin对象支持仅用于origin request。我是否有可能为查看器请求获取来自哪个客户端的域名?

我需要它的原因是,我有多个域,用户可以访问同一个CloudFront分发版。因此,当用户来自不同的域时,必须将用户重定向到不同的新闻网站。

有人能支持我吗?

如果您想获得分发域名

const distributionDomain = event.Records[0].cf.config.distributionDomainName;

您可以在AWS文档中找到更多信息

此外,检查

Lambda@Edge示例功能

单据

从AWS访问源URLlambda@edge

另外,尝试这种方式

'use strict';
exports.handler = (event, context, callback) => {
const response = event.Records[0].cf.response;
const request = event.Records[0].cf.request;
const hostHeader = request.headers['host'][0].value;
callback(null, response);
};

hostHeader应为CNAME(域名(

更多信息点击这里

最新更新