如何实现Node.js Lambda函数:满足条件重定向,否则放行原请求
完善CloudFront Viewer Request Lambda函数以继续原请求
当你的Lambda函数作为CloudFront的Viewer Request触发器时,如果不需要修改或中断请求,直接返回传入的event.request对象即可,CloudFront会基于这个对象继续处理原请求流程。
修改后的完整代码如下:
'use strict'; exports.handler = async (event, context, callback) => { // 替换成你的实际条件判断逻辑,比如检查请求路径、请求头、客户端IP等 const conditionMet = /* 示例:event.request.uri === '/need-redirect' */ false; if (conditionMet) { const response = { status: '302', statusDescription: 'Found', headers: { location: [ { key: 'Location', value: 'https://www.yahoo.fr', } ], }, }; return response; } else { // 直接返回原请求对象,CloudFront将继续按原流程处理请求 return event.request; } };
关键说明:
- Viewer Request类型的Lambda@Edge函数有两种返回逻辑:
- 返回响应对象(如你写的302跳转响应):CloudFront会直接把这个响应返回给用户,中断原请求链路
- 返回请求对象(
event.request):CloudFront会携带这个请求继续向后端(缓存或源站)发起请求
- 务必把
conditionMet替换为实际的判断逻辑,比如检查请求URI、查询参数、请求头字段等 - 注意CloudFront要求的响应头格式:每个头字段是包含
key和value的数组,且key的大小写需要符合HTTP规范(比如Location首字母大写)
内容的提问来源于stack exchange,提问作者Thomas Carlton
相关产品推荐
相关产品推荐

