如何在CloudFront+S3托管的网站中实现单页面301重定向?
解决CloudFront+S3架构下的单页面301重定向问题
方法1:使用CloudFront函数(推荐)
CloudFront函数在边缘节点处理重定向,性能更优,且直接返回自定义域名的目标地址,操作步骤如下:
- 登录AWS控制台,进入CloudFront服务,找到你的网站分发
- 切换到「函数」标签,点击「创建函数」,选择「查看器请求」类型,命名后完成创建
- 在函数编辑器中输入以下代码:
function handler(event) { const request = event.request; const uri = request.uri; // 匹配需要重定向的路径 if (uri === '/category/coins/') { return { statusCode: 301, statusDescription: 'Moved Permanently', headers: { 'location': { value: 'https://www.example.com/cat/coins.html' } } }; } // 其他请求正常转发至S3 return request; }
- 保存并发布函数,回到CloudFront分发的「行为」标签,编辑对应默认行为,在「函数关联」的「查看器请求」下拉框中选择刚创建的函数,保存并更新分发
方法2:修正S3重定向规则(指定绝对URL)
如果坚持用S3配置,需在重定向规则中明确指定完整的绝对目标URL,而非相对路径:
- 进入S3控制台,找到托管网站的存储桶,切换到「属性」标签,下拉至「静态网站托管」区域
- 编辑重定向规则,添加如下XML配置:
<RoutingRules> <RoutingRule> <Condition> <KeyPrefixEquals>category/coins/</KeyPrefixEquals> </Condition> <Redirect> <HostName>www.example.com</HostName> <Protocol>https</Protocol> <ReplaceKeyWith>cat/coins.html</ReplaceKeyWith> <HttpRedirectCode>301</HttpRedirectCode> </Redirect> </RoutingRule> </RoutingRules>
- 保存配置后,手动发起CloudFront缓存失效请求(针对
/category/coins/路径),等待生效后测试
方法3:对象级重定向(适合单个页面场景)
仅针对单个页面的话,可直接在S3中创建空对象并配置重定向:
- 在S3存储桶中创建路径
category/coins/(保留末尾斜杠,模拟目录结构) - 上传一个空文件(命名为
index.html),进入该对象的「属性」页面,找到「重定向」选项 - 勾选「启用重定向」,设置目标地址为
https://www.example.com/cat/coins.html,HTTP状态码选择301,保存设置
注意:所有配置完成后,若重定向未立即生效,需检查CloudFront缓存策略,必要时发起缓存失效操作。
内容的提问来源于stack exchange,提问作者John Sobanski
相关产品推荐
相关产品推荐

