利用cf的worker对不同国家的访问进行重定向

今天在发布facebok公众页面链接的时候发现了一个问题,如果是不同的国家的人点击了这个商品怎么办?我的站点默认中文为主的,去年好像cf支持了worker的路由了,问了下chatgpt,发现是可以实现的,代码如下:

常用的国家代码

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

async function handleRequest(request) {
  const url = new URL(request.url)
  const country = request.headers.get('cf-ipcountry')

  // 根据访问的国家进行重定向
  switch (country) {
    case 'US':
    case 'GB':
    case 'CA':
    case 'AU':
    case 'NZ':
    case 'IE':
    case 'ZA':
    case 'IN':
      // 英语地区重定向到 en.demo.com
      url.hostname = 'en.demo.com'
      break
    case 'CN':
      // 中国大陆重定向到 www.demo.com
      url.hostname = 'www.demo.com'
      break
    case 'AE':
    case 'SA':
    case 'EG':
    case 'MA':
      // 阿拉伯语地区重定向到 ar.demo.com
      url.hostname = 'ar.demo.com'
      break
    case 'ES':
    case 'MX':
    case 'CO':
    case 'AR':
      // 西班牙语地区重定向到 es.demo.com
      url.hostname = 'es.demo.com'
      break
    case 'FR':
    case 'BE':
    case 'CH':
    case 'LU':
      // 法语地区重定向到 fr.demo.com
      url.hostname = 'fr.demo.com'
      break
    case 'JP':
      // 日本地区重定向到 ja.demo.com
      url.hostname = 'ja.demo.com'
      break
    case 'RU':
    case 'UA':
    case 'BY':
      // 俄语地区重定向到 ru.demo.com
      url.hostname = 'ru.demo.com'
      break
    default:
      // 其他地区保持原有地址
      return fetch(request)
  }

  // 构建新的URL并返回重定向响应
  const newUrl = new URL(url.origin + url.pathname + url.search + url.hash)
  return Response.redirect(newUrl.toString(), 301)
}

在单个域名的设置界面绑定worker路由即可。

问题

cf的dns国内不知道能不能解析到,这个worker重新301重定向到国内的备案域名不知道速度怎么样,待验证。

场景

因为这个场景强制用户只能访问固定国家的域名,比如美国只能访问英语,美国的中国人也只能访问英语,不合理,所以还是用js弹窗来解决吧。


作者:spike

分类: 独立开发

创作时间:2024-06-14

更新时间:2024-06-15

联系方式放在中括号之中例如[[email protected]],回复评论在开头加上标号例如:#1