首页 > 解决方案 > Cloudflare Workers 主 URL 重定向不起作用,参数也不起作用

问题描述

异地在这里。我正在尝试使用 Cloudflare Workers 将子域重定向到不同的域,但它不起作用:wa.example.com 到 wa.me/60123456789

及其运行良好的路径:wa.example.com/WantToBuy 到 wa.me/60123456789?text=Want%20To%20Buy

此外,我无法从同一脚本中的子域中删除参数(fbclid) 。

这个工人的路线是 wa.example.com/*

我如何使它工作?先感谢您。

这是我的完整脚本:

addEventListener('fetch', event => {
  event.respondWith(fetchAndApply(event.request))
})

async function fetchAndApply(request) {

let url = new URL(request.url);
let path = url.pathname;

var yourNumber = "60123456789"
const yourMessage = "'"+path+"'"

  number = yourNumber
  message = yourMessage.match(/(\d+|[a-z]+|([A-Z]([A-Z]+|[a-z]*)))/g).join('%20')

let whatsapp = 'wa.me/' + number + '?text=' + message

return fetch(whatsapp,request);
}

addEventListener('fetch', event => {
  let url = new URL(event.request.url)

  if (url.searchParams.has('fbclid'))
   url.searchParams.delete('fbclid')

  event.respondWith(
    fetch(url, event.request)
  )
})

标签: javascriptredirectservice-workercloudflarecloudflare-workers

解决方案


这里有几个问题...

number = yourNumber
message = yourMessage.match(/(\d+|[a-z]+|([A-Z]([A-Z]+|[a-z]*)))/g).join('%20')

你应该把varor放在let这些声明之前numberand message。否则,您会将这些存储到全局变量中,这可能会影响其他请求,这几乎肯定不是您想要的。

message = yourMessage.match(/(\d+|[a-z]+|([A-Z]([A-Z]+|[a-z]*)))/g).join('%20')

match()没有找到任何匹配项时,它返回null. 当你然后调用.join()它时,这将引发异常。实际上,在预览中运行脚本会在控制台中生成以下错误消息:Uncaught (in response) TypeError: Cannot read property 'join' of null

这就是为什么您的脚本在没有发送路径时不起作用的原因——在这种情况下,正则表达式不匹配。

let whatsapp = 'wa.me/' + number + '?text=' + message

您可能希望添加https://到此 URL 的开头,否则它无效。

addEventListener('fetch', event => {

您的脚本addEventListener('fetch')不止一次使用,两个侦听器都会产生结果。调用的第一个侦听respondWith()器将“获胜”,因此第二个侦听器被忽略,因此您发现它不起作用。


推荐阅读