S3配置www跳转非www时URL自动追加/index.html如何解决?
问题根因
跳转自动追加index.html是S3静态网站托管的默认逻辑导致的:为www对应的S3桶配置默认索引文档index.html后,所有根路径请求会先被S3内部解析为/index.html,触发全局重定向规则时就会把解析后的路径带到目标域名,最终出现多余后缀。
解决方法
方法1:修改S3自定义重定向规则
不要使用S3静态网站托管自带的「全局重定向到其他域名」配置,换成自定义重定向规则直接匹配所有请求跳转,同时清空桶的默认索引文档配置,避免S3自动解析路径。规则示例:
[ { "Condition": { "KeyPrefixEquals": "" }, "Redirect": { "HostName": "example.com", "Protocol": "https", "HttpRedirectCode": "301", "ReplaceKeyPrefixWith": "" } } ]
方法2:通过CloudFront Functions实现重定向(更推荐)
完全绕过S3的重定向逻辑,直接在www对应的CloudFront分发配置Viewer Request触发的函数,直接返回301重定向,不会出现多余后缀,函数示例:
function handler(event) { return { statusCode: 301, statusDescription: 'Moved Permanently', headers: { 'location': { value: 'https://example.com' + event.request.uri } } }; }
配置完成后关联到CloudFront分发的Viewer Request事件,清除CloudFront缓存即可验证生效。
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

