Cara Membuat Maintenance Mode di Apache Menggunakan .htaccess (Status 503)
Saat website perlu perbaikan (update, migrasi, perbaikan error 500, atau hardening keamanan), cara paling rapi di server Apache adalah menampilkan halaman maintenance untuk semua pengunjung, sekaligus mengirim HTTP 503 Service Unavailable.
Status 503 penting karena memberi sinyal ke mesin pencari bahwa downtime ini sementara (lebih SEO-friendly dibanding 301/302 atau halaman error biasa).
Di artikel ini, kita akan membuat:
-
file
maintenance.htmlsebagai tampilan “Situs sedang perbaikan” -
rule
.htaccessuntuk:-
mengarahkan semua halaman ke maintenance
-
mengirim status 503
-
menambahkan header no-cache + Retry-After
-
opsi whitelist IP agar admin tetap bisa akses
-
pengecualian asset statis (CSS/JS/logo) dan WordPress admin/login (opsional)
-
Persiapan
Pastikan kamu punya akses:
-
File Manager cPanel atau FTP/SFTP
-
File
.htaccessdi root website (biasanyapublic_html/.htaccess)
Struktur sederhana yang kita pakai:
Langkah 1 — Buat Halaman Maintenance (maintenance.html)
Buat file maintenance.html di root website (misalnya public_html/maintenance.html).
Berikut 1 file HTML maintenance page (tinggal simpan sebagai maintenance.html lalu upload ke hosting). Sudah responsive, ada tombol kontak, auto-refresh opsional, dan countdown opsional.
Kamu bisa pakai template HTML yang sudah kamu minta sebelumnya (atau versi sederhana). Yang penting: file ini bisa diakses.
Tips: pastikan
maintenance.htmlpunya<meta name="robots" content="noindex,nofollow">supaya tidak terindeks.
Langkah 2 — Aktifkan Maintenance Mode via .htaccess (Copy–Paste)
Buka .htaccess kamu, lalu tempel blok ini di paling atas (sebelum rules WordPress jika ada):
Penjelasan singkat (biar kamu paham “kenapa”)
-
RewriteCond %{REQUEST_URI} !^/maintenance\.html$
supaya file maintenance tidak ikut “diputar” lagi (menghindari loop). -
RewriteCond ... asset statis
agar file CSS/JS/logo tetap bisa dimuat (halaman maintenance jadi rapi). -
RewriteRule ^ - [R=503,L]
semua request dipaksa jadi 503. -
ErrorDocument 503 /maintenance.html
saat 503 terjadi, Apache menampilkanmaintenance.html. -
Header
Cache-Control+Pragma
mencegah browser/CDN menyimpan halaman maintenance terlalu lama. -
Retry-After "3600"
menyarankan klien untuk mencoba lagi setelah 1 jam (3600 detik).
Langkah 3 — Opsi Penting: Whitelist IP (Admin Tetap Bisa Akses)
Kalau kamu ingin website tetap bisa diakses normal dari IP kamu (agar bisa fixing tanpa mematikan maintenance), aktifkan bagian whitelist IP:
Cara pakainya:
-
Hapus tanda
#di depan barisnya -
Ganti IP dengan IP publik kamu (format harus sama)
-
Simpan
.htaccess
Langkah 4 — Cara Mematikan Maintenance Mode
Untuk menonaktifkan maintenance:
-
hapus blok “MAINTENANCE MODE”, atau
-
comment semua rule maintenance (beri
#), atau -
pindahkan blok itu ke file catatan sementara.
Begitu blok dihapus, website kembali normal.
Alternatif Aman untuk Shared Hosting (Jika R=503 Ditolak)
Beberapa shared hosting membatasi beberapa rule tertentu. Jika kamu mengalami error saat pakai [R=503], gunakan pendekatan maintenance.php.
1) Buat file maintenance.php di root
2) Ubah ErrorDocument di .htaccess
Ganti:
menjadi:
Checklist Cepat (Supaya Tidak Salah)
-
maintenance.htmlada di root (public_html/maintenance.html) -
Blok maintenance diletakkan paling atas
.htaccess -
Tidak ada typo pada nama file (
maintenance.htmlvsmaintanance.html) -
Kalau WordPress, rule WordPress tetap di bawah (jangan dihapus)
-
Jika halaman maintenance tampil tapi CSS tidak masuk, pastikan rule pengecualian asset aktif
-
Setelah selesai, jangan lupa matikan maintenance (hapus blok)
Troubleshooting Singkat
1) Maintenance tidak tampil sama sekali
-
Pastikan
.htaccessterbaca (AllowOverride aktif di Apache; di shared hosting biasanya sudah) -
Pastikan
mod_rewriteaktif (umumnya aktif) -
Cek apakah ada error 500 karena salah sintaks
.htaccess(hapus baris terakhir yang kamu tambah untuk uji)
2) Tampil tapi styling berantakan
-
Pastikan pengecualian asset statis aktif (
css|js|png|...) -
Atau taruh CSS inline di
maintenance.html(paling aman)
3) WordPress admin ikut terkunci
-
Pastikan pengecualian
wp-login.phpdanwp-adminaktif -
Kalau tetap ingin admin ikut terkunci, cukup hapus dua baris pengecualian WordPress tersebut

