AI Insights
Generate a summary and suggested tags for this post.
Kadang kita butuh redirect yang berbeda tergantung kondisi — misalnya user Indonesia ke halaman ID, user mobile ke versi m.domain.com, atau split traffic 50/50 untuk A/B test. Semua bisa dilakukan di edge pakai Cloudflare Workers.

1. Redirect Berdasarkan Negara
Cloudflare inject header cf-ipcountry di setiap request.
export default {
async fetch(request) {
const country = request.cf?.country || request.headers.get("cf-ipcountry");
if (country === "ID") return Response.redirect("https://example.com/id", 302);
if (country === "MY") return Response.redirect("https://example.com/my", 302);
return Response.redirect("https://example.com/en", 302);
}
};2. Redirect Berdasarkan Device
Deteksi mobile dari User-Agent:
const ua = request.headers.get("user-agent") || "";
const isMobile = /Mobile|Android|iPhone|iPad/.test(ua);
return Response.redirect(
isMobile ? "https://m.example.com" : "https://example.com",
302
);3. Redirect Berdasarkan Waktu
Tampilkan promo di jam tertentu:
const hour = new Date().getUTCHours() + 7; // WIB
if (hour >= 9 && hour < 17) {
return Response.redirect("https://example.com/promo-siang", 302);
}
return Response.redirect("https://example.com/", 302);4. A/B Testing (Split Traffic 50/50)
const variant = Math.random() < 0.5 ? "A" : "B";
return Response.redirect(`https://example.com/landing-${variant}`, 302);Kombinasikan dengan cookie biar user dapat variant konsisten:
const cookie = request.headers.get("cookie") || "";
let variant = cookie.match(/variant=([AB])/)?.[1];
if (!variant) variant = Math.random() < 0.5 ? "A" : "B";
return new Response(null, {
status: 302,
headers: {
Location: `https://example.com/landing-${variant}`,
"Set-Cookie": `variant=${variant}; Path=/; Max-Age=2592000`
}
});5. Bulk Redirect dari KV
Simpan mapping di KV:
// old-url → new-url
await REDIRECTS.put("/blog/lama", "/blog/baru");
await REDIRECTS.put("/promo-2023", "/promo-2024");Worker:
const target = await REDIRECTS.get(url.pathname);
if (target) return Response.redirect(new URL(target, url).toString(), 301);Jenis Redirect Status Code
| Status | Nama | Kapan Pakai |
|---|---|---|
| 301 | Permanent | URL pindah selamanya (SEO baik) |
| 302 | Found (Temporary) | Redirect sementara (promo, A/B test) |
| 307 | Temporary Redirect | Method HTTP dipertahankan |
| 308 | Permanent Redirect | Method HTTP dipertahankan (permanent) |
Use Case Real
- E-commerce — user ID ke
/id, US ke/us - News site — mobile user ke AMP version
- Marketing — A/B test landing page
- Migration — redirect URL lama ke struktur baru
Kesimpulan
Redirect dinamis di edge = cepat & tanpa hit ke origin server. Cocok untuk lokalisasi, deteksi device, A/B testing, atau bulk redirect saat migrasi. Cloudflare Workers menyediakan request.cf object yang kaya (country, city, timezone, ASN, dll) — manfaatkan!
