我在 aws s3 上有一个静态网站。已设置路线 53 和云前,一切顺利。s3 Bucket 设置为将 index.html 作为索引文档提供服务。
现在我添加了另一个名为 index-en.html 的文件,当请求国家是任何其他国家而不是我的祖国时应该提供该文件。
为此,我添加了一个带有以下代码的 lambda@edge 函数:
'use strict';
/* This is an origin request function */
exports.handler = (event, context, callback) => {
const request = event.Records[0].cf.request;
const headers = request.headers;
/*
* Based on the value of the CloudFront-Viewer-Country header, generate an
* HTTP status code 302 (Redirect) response, and return a country-specific
* URL in the Location header.
* NOTE: 1. You must configure your distribution to cache based on the
* CloudFront-Viewer-Country header. For more information, see
* http://docs.aws.amazon.com/console/cloudfront/cache-on-selected-headers
* 2. CloudFront adds the CloudFront-Viewer-Country header after the viewer
* request event. To use this example, you must create a trigger for the
* origin request event.
*/
let url = 'prochoice.com.tr';
if (headers['cloudfront-viewer-country']) {
const countryCode = headers['cloudfront-viewer-country'][0].value;
if (countryCode === 'TR') {
url = 'prochoice.com.tr';
} else {
url = 'prochoice.com.tr/index-en.html';
}
}
const response = {
status: '302',
statusDescription: 'Found',
headers: {
location: [{
key: 'Location',
value: url,
}],
},
};
callback(null, response);
};
我还编辑了云端行为以将 Origin 和 Viewer-country 标头列入白名单,并设置 cloudfront Viewer-Request 事件和 lambda Function ARN 关系。
但是我收到“太多重定向错误”。
我有两个问题:
- 如何纠正“重定向错误太多”?
- 对于“TR”以外的查看者,默认登陆页面应该是 index-en.html,通过导航菜单可以访问另外 2 个英文页面。因此,当用户从页面导航请求特定页面时,他们应该能够访问这些页面,当没有请求页面时,应该提供默认登录页面。
感谢帮助。谢谢。