S3 www to non-www redirect将/index.html附加到URL后面



假设我的域名是example.com,我已经设置了www到非www重定向使用两个S3桶,两个CloudFront发行版根据这篇博客文章,并在www桶中设置了指向example.com的重定向。

这工作得很好,但它实际上重定向到example.com/index.html。是否有可能将其重定向到example.com?

您的发行版配置中是否有index.html?我不能说为什么您会看到添加了index.html的重定向,但是一种更简单的方法—不需要两个桶,并且对重定向有更多的控制—是使用CloudFront函数(在Functions中提供)。部分)。下面是一个例子:

function handler(event) {
var request = event.request;
var host = request.headers.host.value;
if (host === 'www.example.com') {    
var response = {
statusCode: 301,
statusDescription: 'Moved Permanently',
headers: { 
'location': { 'value': `https://example.com${request.uri}` } 
}
};
return response;
}
return request;
}

您可以将其设置为查看器请求函数,并将其附加到缓存行为。使用此设置,您只需要将example.com和www.example.com设置为备用域名的单个发行版。

如果您需要将index.html设置为您的根对象,您也可以在主机不是www.example.com时通过修改request.uri在函数中这样做-这样,如果您在发行版中有任何对index.html的引用,您可以将其全部移动到该函数中。下面是一个示例函数,演示了如何在将请求发送到S3之前重写URI(确保面向外部的URL不变):https://github.com/aws-samples/amazon-cloudfront-functions/tree/main/url-rewrite-single-page-apps

检查你的www发行版没有"默认根对象"index.html的值。把它变成空白对我来说修复了同样的问题。

最新更新