今天在发布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弹窗来解决吧。