Cloudflare工人重定向

问题描述

让我们说我有一个网站asdf.com,我想写一个可以进行大量重定向(超过30个)的工作程序。例如www.asdf.com/app-> app-asdf.com,www.asdf.com/dashboard-> dashboard-asdf.com。 我尝试了以下操作,但不起作用:

async function handleEvent(event) {
  const url = new URL(event.request.url)

  // Redirects
  const redirects = {
    'bitgravity': 'tata-communications','highwinds': 'stackpath','maxcdn': 'stackpath','netdna': 'stackpath','level3': 'centurylink','/blog/Feed/': '/blog/Feed.xml','/blogdef/': '/social/blog/','/geodef/': '/social/geo/','/guidedef/': '/social/guides/','/blog/akamai-down/': '/blog/'
  }

  let target = null
  
  for (const source in redirects) {
    if (url.pathname.includes(source)) {
      if(target == null){
        target = new URL(url.href)
      }
      target = new URL(target.href.replace(source,redirects[source]))
    }
  }

  if (target != null){
    return Response.redirect(target,301)
  }
}

解决方法

函数结尾:

std::vector

如果 if (target != null){ return Response.redirect(target,301) } } target(表示没有重定向匹配),则您不返回任何值。这将产生一个异常(错误1101)。在预览中运行时,JS控制台将显示错误:“未捕获(作为响应)TypeError:无法执行功能:参数1的类型不是'Response'。”

您可能希望将代码更改为:

null

当然,您的工作人员在顶部也需要这个(但我想您只是为了简洁起见就忽略了它):

  if (target != null){
    return Response.redirect(target,301)
  }

  return fetch(event.request)
}