Lewati ke isi

Website & Domain

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.

Terbit 6 menit baca

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
  1. Apa yang perlu disiapkan sebelum mulai?
  2. Bagaimana cara membuat redirect HTTP ke HTTPS?
  3. 1. Backup file .htaccess
  4. 2. Tambahkan kode redirect dasar
  5. 3. Pilih versi www atau non-www sekaligus
  6. 4. Kalau website di balik Cloudflare atau proxy
  7. 5. Jaga urutan dengan aturan WordPress
  8. 6. Uji hasilnya
  9. Bagaimana kalau beberapa folder perlu dikecualikan?
  10. Ringkasan kode sesuai kondisi
  11. 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:

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

KondisiKode yang dipakai
Hosting biasa, hanya paksa HTTPSKode dasar langkah 2
Sekaligus seragamkan ke non-wwwKode non-www langkah 3
Sekaligus seragamkan ke wwwKode www langkah 3
Di balik proxy yang mengirim X-Forwarded-ProtoKode 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 -I menunjukkan 301 ke alamat HTTPS akhir dalam satu lompatan.
  • Alamat situs di pengaturan aplikasi sudah memakai https://.
  • Tidak ada peringatan mixed content di halaman penting.

Sumber & referensi

Baca juga