Cara Redirect HTTP ke HTTPS lewat .htaccess
Kode .htaccess siap pakai untuk redirect HTTP ke HTTPS dengan 301, versi www dan non-www, versi di balik Cloudflare, serta cara mengujinya.
Jawaban singkat
Aktifkan RewriteEngine, tambahkan RewriteCond %{HTTPS} off, lalu RewriteRule ke https://%{HTTP_HOST}%{REQUEST_URI} dengan flag R=301. Letakkan di bagian atas .htaccess, sebelum aturan WordPress, lalu uji dengan curl -I.
Daftar isi
- Apa yang perlu disiapkan sebelum mulai?
- Bagaimana cara membuat redirect HTTP ke HTTPS?
- 1. Backup file .htaccess
- 2. Tambahkan kode redirect dasar
- 3. Pilih versi www atau non-www sekaligus
- 4. Kalau website di balik Cloudflare atau proxy
- 5. Jaga urutan dengan aturan WordPress
- 6. Uji hasilnya
- Bagaimana kalau beberapa folder perlu dikecualikan?
- Ringkasan kode sesuai kondisi
- Pertanyaan yang sering diajukan
Sertifikat SSL sudah terpasang, tapi pengunjung yang mengetik alamat tanpa https:// masih mendarat di versi HTTP? Kamu perlu redirect. Di hosting yang memakai Apache atau LiteSpeed (umum di cPanel), caranya cukup menambahkan beberapa baris di file .htaccess.
Redirect permanen (301) memastikan setiap pengunjung, tautan lama, dan mesin pencari diarahkan ke versi HTTPS yang sama. Panduan ini memberi kode siap pakai untuk beberapa kondisi, karena satu kode yang sama tidak selalu cocok untuk semua setup.
Apa yang perlu disiapkan sebelum mulai?
Pastikan dua hal ini sudah beres, karena redirect ke HTTPS tanpa sertifikat valid justru membuat pengunjung melihat peringatan keamanan:
- Sertifikat SSL aktif dan valid untuk domain utama dan
www. Di cPanel, cek menu SSL/TLS Status, atau ikuti cara pasang SSL gratis di cPanel dengan AutoSSL. - Kamu bisa membuka
https://domainkamu.comsecara manual tanpa peringatan.
Kalau hostingmu menyediakan tombol Force HTTPS Redirect di menu Domains cPanel, itu cara paling sederhana. Kode .htaccess berguna bila tombol itu tidak ada atau kamu butuh aturan yang lebih spesifik.
Bagaimana cara membuat redirect HTTP ke HTTPS?
1. Backup file .htaccess
Buka File Manager di cPanel, masuk ke folder public_html (atau folder root domain), lalu aktifkan opsi Show Hidden Files di Settings karena nama file berawalan titik disembunyikan secara bawaan. Unduh salinan .htaccess yang ada. Kalau file belum ada, buat file baru bernama .htaccess.
2. Tambahkan kode redirect dasar
Letakkan kode ini di paling atas file:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Artinya: bila permintaan tidak lewat HTTPS, alihkan ke alamat yang sama (domain dan path dipertahankan) dengan skema https://, memakai kode 301 yang berarti permanen. %{REQUEST_URI} sudah membawa path, dan query string ikut terbawa secara otomatis.
3. Pilih versi www atau non-www sekaligus
Sebaiknya website hanya punya satu alamat utama. Kalau memilih tanpa www, gunakan kode ini sebagai pengganti kode dasar:
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301]
Kalau memilih dengan www:
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [L,R=301]
Dengan cara ini, empat variasi alamat (http://, http://www., https://, https://www.) berakhir di satu alamat dalam satu kali redirect. Pastikan pilihanmu sama dengan alamat situs di pengaturan WordPress atau aplikasi.
4. Kalau website di balik Cloudflare atau proxy
Bila domain memakai proxy Cloudflare dengan mode SSL Flexible, koneksi dari Cloudflare ke server memakai HTTP. Server selalu melihat %{HTTPS} off dan terus mengalihkan, sehingga terjadi redirect berulang. Solusi terbaiknya adalah mengganti mode SSL ke Full (strict) karena server sudah punya sertifikat. Bila sementara harus tetap di belakang proxy yang mengirim header X-Forwarded-Proto, gunakan kondisi ini:
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Gejala dan penyelesaian redirect berulang dibahas lebih lengkap di error too many redirects setelah pindah HTTPS.
5. Jaga urutan dengan aturan WordPress
WordPress menulis blok # BEGIN WordPress sampai # END WordPress di .htaccess. Letakkan kode redirect di atas blok itu, jangan di dalamnya, karena isi blok bisa ditulis ulang saat kamu menyimpan pengaturan permalink.
6. Uji hasilnya
Buka jendela penyamaran di browser dan ketik alamat berawalan http://. Atau, lebih pasti, gunakan terminal:
curl -I http://domainkamu.com/kontak
Hasil yang benar menampilkan HTTP/1.1 301 Moved Permanently dan baris Location: https://domainkamu.com/kontak. Ulangi untuk versi www dan pastikan hanya ada satu kali lompatan ke alamat akhir.
Browser menyimpan redirect 301 di cache cukup lama. Kalau saat uji coba kamu salah menulis tujuan, browser bisa terus membuka alamat yang salah meski kode sudah diperbaiki. Karena itu, pengujian lewat curl atau jendela penyamaran lebih bisa dipercaya daripada tab biasa.
Bagaimana kalau beberapa folder perlu dikecualikan?
Kadang ada folder yang sengaja dibiarkan di HTTP, misalnya endpoint lama untuk perangkat yang belum mendukung HTTPS. Tambahkan kondisi pengecualian sebelum RewriteRule, contohnya:
RewriteCond %{REQUEST_URI} !^/api-lama/
Gunakan pengecualian seperlunya saja. Setiap folder yang tetap di HTTP berarti data di folder itu dikirim tanpa enkripsi.
Ringkasan kode sesuai kondisi
| Kondisi | Kode yang dipakai |
|---|---|
| Hosting biasa, hanya paksa HTTPS | Kode dasar langkah 2 |
| Sekaligus seragamkan ke non-www | Kode non-www langkah 3 |
| Sekaligus seragamkan ke www | Kode www langkah 3 |
| Di balik proxy yang mengirim X-Forwarded-Proto | Kode langkah 4 |
| Punya akses konfigurasi server (VPS) | Directive Redirect di VirtualHost port 80 |
Untuk pengguna VPS dengan akses ke konfigurasi Apache, dokumentasi Apache sendiri menyarankan memakai directive Redirect sederhana di blok VirtualHost port 80 bila memungkinkan, karena lebih ringan daripada mod_rewrite di .htaccess yang dibaca pada setiap permintaan.
Pertanyaan yang sering diajukan
Kenapa harus 301, bukan 302?
301 berarti pindah permanen. Mesin pencari memindahkan sinyal peringkat ke alamat HTTPS dan browser mengingat pengalihan itu. 302 berarti sementara dan sebaiknya hanya dipakai untuk uji coba.
Website jadi error 500 setelah mengedit .htaccess, apa yang terjadi?
Biasanya salah ketik atau modul rewrite tidak aktif. Kembalikan file dari backup, lalu tempel ulang kode dengan teliti. Pesan detailnya bisa dilihat di error log cPanel.
Apakah redirect ini mengganggu perpanjangan SSL gratis?
Umumnya tidak. Validasi Let's Encrypt lewat HTTP mengikuti redirect ke HTTPS. Masalah baru muncul bila ada aturan lain yang memblokir folder /.well-known/.
Perlukah memasang HSTS setelah redirect berjalan?
HSTS membuat browser langsung memakai HTTPS tanpa mencoba HTTP lebih dulu. Pasang setelah yakin semua subdomain siap HTTPS, dan mulai dengan nilai max-age kecil.
Apakah redirect ini memengaruhi SEO?
Redirect 301 yang konsisten ke satu alamat justru membantu, karena tidak ada lagi versi ganda halaman yang sama. Perbarui juga properti di Google Search Console dan sitemap ke versi HTTPS.
Checklist sebelum selesai:
- Sertifikat valid untuk domain utama dan www.
- Kode redirect berada di atas blok WordPress.
curl -Imenunjukkan 301 ke alamat HTTPS akhir dalam satu lompatan.- Alamat situs di pengaturan aplikasi sudah memakai
https://. - Tidak ada peringatan mixed content di halaman penting.


