Pengantar Mod Rewrite Apache
Mod_rewrite adalah modul server Apache yang menggunakan mesin berbasis aturan berbasis ekspresi reguler (regex) untuk menulis ulang URL yang diminta secara dinamis saat terbang (on-the-fly). Modul ini esensial untuk membangun URL yang bersih (clean URLs), memaksa penggunaan HTTPS, menangani redirect 301, dan menyembunyikan struktur direktori backend yang rumit.
Untuk mengaktifkan modul ini di lingkungan server berbasis Ubuntu/Debian, jalankan perintah a2enmod rewrite dan pastikan direktif AllowOverride All telah dikonfigurasi di dalam blok konfigurasi VirtualHost Apache Anda agar file .htaccess diizinkan membaca aturan tulis ulang.
Sintaks Dasar & Flag Utama
Struktur dasar aturan mod_rewrite di dalam file .htaccess atau blok <Directory> mengikuti pola:
RewriteEngine On
RewriteCond {Variabel} {Pola} [Flag]
RewriteRule {Pola_Pencarian} {URL_Pengganti} [Flag]
Tabel Flag Mod_Rewrite Populer
| Flag | Nama | Fungsi Utama |
|---|---|---|
[R=301] / [R=302] |
Redirect | Memaksa browser melakukan redirect HTTP eksternal (Permanent atau Temporary). |
[L] |
Last | Menghentikan pemrosesan aturan mod_rewrite lebih lanjut jika kondisi terpenuhi. |
[NC] |
No Case | Membuat pola pencarian mengabaikan perbedaan huruf besar dan kecil (case-insensitive). |
[QSA] |
Query String Append | Menggabungkan parameter query string lama ke URL baru yang dihasilkan. |
[F] |
Forbidden | Mengembalikan status HTTP 403 Forbidden ke klien yang mengakses URL tersebut. |
Contoh Konfigurasi Praktis
Berikut adalah sekumpulan resep konfigurasi mod_rewrite yang paling sering digunakan dalam skenario produksi web modern:
1. Memaksa HTTPS & www
Aturan ini mengalihkan seluruh lalu lintas HTTP standar ke HTTPS yang aman serta memastikan domain menggunakan awalan www secara konsisten.
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(x\.?.*)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L]
2. Clean URL untuk Halaman Profil (Menghilangkan Ekstensi .php)
Mengubah akses URL dari domain.com/profil.php?user=joko menjadi domain.com/profil/joko agar lebih ramah SEO.
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^profil/([a-zA-Z0-9_-]+)$ profil.php?user=$1 [L]
3. Redirect Halaman Lama ke Domain Baru (301 Permanent)
RewriteEngine On
RewriteRule ^kategori/lama/(.*)$ /kategori/baru/$1 [R=301,L]
Troubleshooting & Debugging Mod_Rewrite
Ketika aturan rewrite gagal bekerja atau menyebabkan kesalahan pengalihan tak berujung (infinite redirect loop), Anda dapat mengaktifkan fitur pencatatan log khusus untuk modul ini tanpa harus mengganggu performa server secara keseluruhan.
RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3
Catatan: Direktif RewriteLog dan RewriteLogLevel sudah digantikan oleh konfigurasi LogLevel tingkat lanjut pada versi Apache 2.4 ke atas. Gunakan perintah berikut di dalam VirtualHost untuk debugging:
LogLevel alert rewrite:trace3
Selalu periksa apakah file .htaccess terbaca oleh Apache, pastikan modul terkait aktif, dan bersihkan cache browser sebelum menguji ulang aturan redirect.