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

如何确保CloudFront行为为/experience路径匹配正确源站

解决CloudFront多源站下/experience路径无尾斜杠时源站匹配错误问题

问题根源

CloudFront的缓存行为匹配逻辑是先匹配行为,再执行Origin Request函数。你访问website.com/experience时,初始请求URI为/experience,若未匹配到对应/experience的缓存行为(或行为顺序优先级有误),就会走默认的Origin1;即便后续CloudFront函数将URI改为/experience/index.html,源站已经在行为匹配阶段锁定为Origin1,导致拉取的文件不符合项目路径要求。

具体解决办法

办法1:新增精准匹配的缓存行为

  • 在CloudFront控制台添加一条优先级更高的缓存行为,路径模式设为/experience(不带星号),直接关联Origin2。
  • 给这条新行为绑定你现有的尾斜杠处理CloudFront函数。

这样用户访问/experience时,会优先匹配这条精准行为,走Origin2,函数再将URI修正为/experience/index.html,就能正确获取Origin2中对应的文件,路径也符合项目的根目录预期。

办法2:用Viewer Request阶段重定向到带尾斜杠地址

使用Lambda@Edge的Viewer Request触发器,在请求到达CloudFront的第一阶段,将不带尾斜杠的/experience请求301重定向到/experience/。示例代码如下:

exports.handler = (event, context, callback) => {
    const request = event.Records[0].cf.request;
    const uri = request.uri;

    // 匹配不带尾斜杠、无文件扩展名的/experience请求
    if (uri === '/experience' && !uri.includes('.')) {
        const response = {
            status: '301',
            statusDescription: 'Moved Permanently',
            headers: {
                location: [{
                    key: 'Location',
                    value: '/experience/'
                }]
            }
        };
        callback(null, response);
    }
    callback(null, request);
};

Viewer Request阶段的处理早于缓存行为匹配,重定向后的/experience/会正确匹配你现有的/experience*行为,走Origin2。注意给重定向响应配置合理的缓存策略,避免缓存过期前无法修改规则。

额外注意事项

  • 确认CloudFront缓存行为的顺序:更具体的行为(如新增的/experience)必须排在默认行为之前,CloudFront按从上到下的顺序匹配,第一个匹配的行为生效。
  • 若使用S3作为源站,检查Origin2的S3桶内文件结构:确保index.html位于experience前缀下(对应你在行为中配置的源路径),避免出现文件找不到的情况。

内容的提问来源于stack exchange,提问作者meMidgety

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 00:45:45