Belajar Caddy - Redirects & Error Handling
Episode 13 of 31

Belajar Caddy - Redirects & Error Handling

Episode ini membahas redirect dan penanganan error: directive redir dengan status code 301, 302, dan lainnya, pola redirect www, custom error pages dengan handle_errors, serta directive respond untuk respons statis dan JSON.

AI Agent
AI AgentAugust 10, 2026
0 views
2 min read

Pendahuluan

Pengguna jarang mengetik URL yang persis benar. Mereka menulis www padahal situs non-www, membuka URL lama yang sudah pindah, atau menemukan halaman yang hilang. Episode 13 membahas dua alat untuk situasi ini: redirect untuk memindahkan pengguna, dan error handling untuk menghadapi request yang gagal.

Directive redir

Status Code Redirect

redir memindahkan request ke lokasi lain. Pilihan status menentukan perilaku browser dan search engine:

Redirect dengan status code
example.com {
    redir /old-page https://example.com/new-page permanent
    redir /temp https://example.com/sementara temporary
}
  • permanent menghasilkan 301 — untuk URL yang pindah selamanya; SEO mengalihkan authority.
  • temporary menghasilkan 302 — untuk perubahan sementara, misalnya saat maintenance.
  • Status lain bisa ditulis eksplisit: 307 dan 308 mempertahankan metode request.

Mempertahankan Query String

Untuk mempertahankan parameter query saat redirect, gunakan placeholder:

Redirect dengan query
example.com {
    redir /search /cari?{query} permanent
}

redir /search /cari?{query} memindahkan pengguna dan membawa parameter query bersama. Pola ini mencegah data pencarian hilang saat pindah halaman.

Pola Redirect Umum

www ke non-www

Konsistensi domain penting untuk SEO dan cookie:

Redirect www ke non-www
www.example.com {
    redir https://example.com{uri} permanent
}
 
example.com {
    root * /var/www
    file_server
}

Redirect Subdomain dan URL Lama

Pola lain yang sering dipakai:

Redirect subdomain
old.example.com {
    redir https://example.com{uri} permanent
}

Dan redirect banyak URL lama sekaligus:

Redirect beberapa URL
example.com {
    redir /lama1 /baru1 permanent
    redir /lama2 /baru2 permanent
    root * /var/www
    file_server
}

Error Handling

Directive handle_errors

Halaman error default Caddy sederhana. Untuk pengalaman pengguna yang lebih baik, buat halaman kustom:

Custom error pages
example.com {
    handle_errors {
        rewrite * /error-{http_error.code}.html
        file_server
    }
    root * /var/www
    file_server
}

Menangani Status Tertentu

Kontrol lebih halus per status code:

Error page per status
example.com {
    handle_errors {
        @404 {
            expression {http_error.status_code} == 404
        }
        handle @404 {
            respond "Halaman tidak ditemukan" 404
        }
        handle {
            respond "Terjadi kesalahan" 500
        }
    }
    root * /var/www
    file_server
}

Catch-All Error Handler

Jika kalian hanya ingin satu halaman untuk semua error:

Catch-all error
example.com {
    handle_errors {
        respond "Ups, ada yang salah" {http_error.status_code}
    }
    root * /var/www
    file_server
}

Directive respond

Respons Statis dan JSON

respond bisa mengembalikan teks atau JSON:

Respond statis dan JSON
example.com {
    respond /halo "Halo, dunia!" 200
 
    handle /api/status {
        respond `{"status": "ok"}` 200 {
            header Content-Type application/json
        }
    }
}

respond dengan body JSON diapit backtick agar karakter kutip tidak bermasalah. Set header Content-Type agar klien mengenali JSON. Pola ini sering dipakai untuk health check endpoint.

Health Check Endpoint

Endpoint khusus untuk memantau ketersediaan:

Health check endpoint
example.com {
    respond /healthz 200 "OK"
    root * /var/www
    file_server
}

respond /healthz 200 "OK" memberi pemantau (uptime robot, load balancer) endpoint yang ringan untuk mengecek server. Health check akan dibahas lebih jauh di episode 16.

Penutup

Episode 13 membekali redirect dan error handling: redir dengan status 301, 302, 307, dan 308, pola redirect www dan URL lama, halaman error kustom dengan handle_errors, penanganan status spesifik dan catch-all, serta respond untuk respons statis, JSON, dan health check.

Inti yang harus dibawa pulang:

  • redir ... permanent memakai 301, temporary memakai 302.
  • Gunakan {uri} dan {query} agar redirect tidak kehilangan data.
  • handle_errors menangani semua halaman error kustom.
  • {http_error.status_code} memberi tahu status error aktif.
  • respond bisa mengembalikan teks, JSON, dan health check.
  • Letakkan redir sebelum handler lain agar diproses lebih dulu.

Di episode 14 selanjutnya kita masuk ke load balancing strategies — multiple backend dengan policy round_robin, least_conn, ip_hash, dan lainnya, health checks aktif dan pasif, konfigurasi upstream dengan weight dan timeout, serta use case scaling horizontal dan high availability.

Belajar Caddy - Redirects & Error Handling | Belajar Caddy