如何解决如何将 www 重定向到 AWS 上的非 www 静态网站
我花了几个小时来解决 AWS 上托管的静态站点从 www 到非 www 版本的重定向问题。
解决方法
您需要将两个 lamda@edge 与 cloudfront 一起使用。
第一个 lambda@edge - CloudFront 事件是查看者请求
exports.handler = (event,context,callback) => {
const request = event.Records[0].cf.request
request.headers['x-forwarded-host'] = [
{ key: 'X-Forwarded-Host',value: request.headers.host[0].value }
]
return callback(null,request)
}
第二个 lambda@edge - CloudFront 事件是源请求
exports.handler = function handler(event,callback) {
const { request } = event.Records[0].cf;
const { uri } = request;
const { suffix,appendToDirs,removeTrailingSlash } = config;
const requestHost = request.headers['x-forwarded-host'][0].value;
if (requestHost.startsWith("www.")) {
const domain_without_www = requestHost.replace("www.","");
var location = "https://" + domain_without_www + request.uri;
var responseWithRedirect = {
status: '301',statusDescription: `Redirecting to apex domain`,headers: {
location: [{
key: 'Location',value: location
}]
}
};
callback(null,responseWithRedirect);
return;
}
// or return request unchanged
callback(null,request);
}
最后一步是将“x-forwarded-host”标头添加到您分发的白名单标头 - 行为部分。
我在 AWS 论坛上找到了这个解决方案,但很难找到。我相信这会对您有所帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。