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

如何为AWS CloudFront创建支持多文件扩展名的单一行为?

实现AWS CloudFront单一行为支持多种文件扩展名的方案

你遇到的问题很常见——CloudFront的行为路径模式确实不支持用|或,这种方式直接指定多个扩展名的OR条件。不过有几种可行的方法能实现你要的效果,我给你梳理一下:

方法一:用Lambda@Edge过滤请求(严格单一行为)

这是最贴合你需求的方案,通过Lambda@Edge函数在请求到达CloudFront时过滤出符合扩展名的请求,然后用一个行为统一处理。

具体步骤:

  • 创建一个Lambda@Edge函数(选择Node.js运行时,部署到us-east-1区域),逻辑是检查请求URI是否以.html或.php结尾。如果符合条件,就继续让请求走当前行为;不符合的话可以返回404或者路由到其他行为。
  • 把这个函数绑定到CloudFront分发的Viewer Request触发器,对应的行为路径设为/*(这样所有请求都会经过这个函数)。

示例代码参考:

exports.handler = (event, context, callback) => {
    const request = event.Records[0].cf.request;
    const uri = request.uri;
    
    // 匹配.html或.php结尾的路径,不区分大小写的话可加/i后缀
    const validExts = /\.(html|php)$/;
    if (validExts.test(uri)) {
        // 符合条件,继续处理请求
        callback(null, request);
    } else {
        // 不符合条件,返回404(你也可以改成重定向逻辑)
        const response = {
            status: '404',
            statusDescription: 'Not Found',
            headers: {
                'content-type': [{ key: 'Content-Type', value: 'text/html' }]
            },
            body: '<h1>404 Not Found</h1>'
        };
        callback(null, response);
    }
};

方法二:创建同配置的多行为(简单易维护)

如果你不需要严格意义上的“单一行为”,只是想让两种扩展名的请求用相同的规则处理,那可以直接创建两个行为:一个路径为*.html,另一个为*.php,然后把它们的源、缓存策略、转发设置等全部配置成一样的。

这种方法不用写代码,设置起来更快捷,而且CloudFront会自动按路径匹配优先级处理请求,效果上和单一行为没区别。

方法三:源端处理扩展名匹配(适合静态/Web服务器源)

如果你的源是S3桶或者EC2上的Web服务器(比如Apache/Nginx),也可以把扩展名匹配的逻辑放在源端:

  • CloudFront只配置一个路径为/*的行为;
  • 在源端设置重写规则(比如Apache的mod_rewrite、Nginx的rewrite指令,或者S3的静态网站重定向规则),让源来识别并处理.html和.php文件的请求。

这种方式把逻辑下放给源,CloudFront只负责转发和缓存,适合已经有源端规则的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:05:11