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

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,进一步放大了循环问题。

分步修复方案

  1. 修正Worker路由配置
    进入Cloudflare控制台的Worker管理页,确认当前Worker的路由规则仅绑定lyl.ai/*,删除所有和1saas.co相关的绑定规则。

  2. 修复初始版本代码逻辑错误
    正确读取接口返回的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);
  }
}
  1. 验证硬编码版本
    如果要测试基础逻辑是否正常,可以先将重定向目标改为和你托管域名无关联的公共地址测试,如果此时访问测试链接没有出现循环,即可确认原问题就是路由绑定错误导致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:24:09