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

如何配置可匹配查询字符串的CloudFront行为路径模式

CloudFront 匹配带查询参数的图片路径正确配置方法

首先明确核心规则:CloudFront 行为的路径模式仅对URI路径部分做匹配,完全不会读取?后的查询字符串内容,所以你写的带?、转义\?的模式从原理上就不可能生效,匹配阶段CloudFront会直接把查询字符串剥离,不会参与路径匹配逻辑。

另外你之前写的模式开头缺少前导斜杠/,本身也不符合CloudFront路径模式的格式要求。

具体配置步骤

你要实现的「/original路径下图片仅带查询参数时命中指定行为、无查询参数不命中」的需求,没法仅靠写路径模式实现,需要按以下方式配置:

  • 新建优先级最高(优先级数字越小越先匹配)的缓存行为,路径模式填写为:
    /original/*.{jpg,gif,png,jpeg,webp}
    
    这个模式会覆盖/original路径下所有你需要的格式的图片请求,不管带不带查询参数都会先匹配到这个行为。
  • 给这个行为绑定查看器请求(Viewer Request)节点触发的CloudFront Functions,用来过滤无查询参数的请求,参考代码如下:
    function handler(event) {
        const request = event.request;
        const imgPathRule = /^\/original\/.+\.(jpg|jpeg|png|gif|webp)$/i;
        // 匹配到图片路径且无查询参数时,直接拦截或转发到你需要的目标规则
        if (imgPathRule.test(request.uri) && Object.keys(request.querystring).length === 0) {
            // 按你的业务需求修改返回逻辑,比如返回403、或者转发到其他源
            return {
                statusCode: 403,
                statusDescription: "Forbidden",
                headers: {
                    "content-type": { value: "text/plain" }
                },
                body: {
                    encoding: "text",
                    data: "Missing required parameters"
                }
            };
        }
        // 带查询参数的图片请求正常放行,走当前行为的缓存、回源规则
        return request;
    }
    
  • 给这个行为配置对应的缓存键、源请求策略:如果需要把查询参数转发给源站、参与缓存,就在缓存键策略里开启对应查询字符串的转发即可。

之前配置不生效的原因

  • original/*?*:一是缺少前导斜杠不符合格式要求,二是路径匹配不覆盖查询字符串部分,?不会被识别为查询字符串分隔符,只会被当成路径里的普通字符,永远匹配不到你的目标路径
  • original/*\?*:除了上述问题外,CloudFront路径模式不支持正则转义字符,\也会被识别为路径普通字符,完全没有转义作用。

内容的提问来源于stack exchange,提问作者박진영

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 23:33:26