Cloudflare Worker实现重定向功能触发无限循环问题排查求助
问题排查与解决方案
核心问题根因排查
- 首先排除你猜测的「内部fetch请求MongoDB接口触发Worker监听」:Cloudflare Worker的
fetch事件仅会监听外部用户向你Worker绑定的Cloudflare托管域名发起的请求,Worker代码内部主动调用fetch发起的第三方请求不会触发当前Worker的事件监听,该猜测不成立。 - 无限重定向的核心原因90%以上来自Worker路由匹配规则配置错误:你当前的Worker大概率同时绑定了测试域名
lyl.ai和重定向目标域名1saas.co的路由。当用户访问lyl.ai/xxx触发重定向到1saas.co后,1saas.co的请求又被转发到同一个Worker,再次触发重定向逻辑跳转回1saas.co,形成死循环。 - 初始版本代码还存在逻辑错误:你调用接口后将返回的JSON数据存入了
result变量,但判断时错误使用了response.destination,fetch返回的原生响应对象本身不存在destination属性,所以判断永远为false,所有请求都会固定重定向到1saas.co,进一步放大了循环问题。
分步修复方案
修正Worker路由配置
进入Cloudflare控制台的Worker管理页,确认当前Worker的路由规则仅绑定lyl.ai/*,删除所有和1saas.co相关的绑定规则。修复初始版本代码逻辑错误
正确读取接口返回的destination字段,同时添加域名前置判断,避免匹配到其他域名时误触发重定向:
addEventListener('fetch', event => { event.respondWith(handleRequest(event.request)) }) async function handleRequest(request) { const url = new URL(request.url) // 前置判断:仅处理lyl.ai域名的请求,其余域名直接透传 if (url.hostname !== 'lyl.ai') { return fetch(request) } const pathname = url.pathname.substring(1) const response = await fetch('https://eu-central-1.aws.webhooks.mongodb-realm.com/api/client/v2.0/app/1saas-functions-mmlow/service/urlRedirect/incoming_webhook/cloudWorker', { headers: { "Accept": "application/json", 'Content-Type': 'application/json', }, method: 'POST', body: JSON.stringify({identifier: pathname}), }) const result = await response.json(); // 正确读取result里的destination字段 if(result.destination) { return Response.redirect(result.destination, 302); } else { return Response.redirect("https://1saas.co", 302); } }
- 验证硬编码版本
如果要测试基础逻辑是否正常,可以先将重定向目标改为和你托管域名无关联的公共地址测试,如果此时访问测试链接没有出现循环,即可确认原问题就是路由绑定错误导致。
内容的提问来源于stack exchange,提问作者KevinRump
相关产品推荐
相关产品推荐

