You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 09:31:03