Apache mod_rewrite adalah modul web server yang menggunakan mesin berbasis aturan berbasis ekspresi reguler (regular expression) untuk mengubah URL yang diminta saat terbang (on the fly). Modul ini esensial untuk mengarahkan lalu lintas web, membuat URL yang ramah SEO, dan mengamankan rute akses direktori.
Untuk mengaktifkan modul ini di lingkungan server berbasis Debian/Ubuntu, jalankan perintah terminal a2enmod rewrite dan pastikan konfigurasi direktori virtual host Anda mengizinkan direktori level override dengan direktif AllowOverride All.
Tabel Contoh Apache Rewrite Rule Umum
| Kasus Penggunaan | Sintaks / Kode Rule | Penjelasan Fungsi |
|---|---|---|
| Force HTTPS | RewriteEngine On |
Mengalihkan seluruh lalu lintas HTTP ke versi HTTPS yang aman. |
| Force www | RewriteEngine On |
Memaksa domain tanpa www (contoh.com) menjadi menggunakan www (www.contoh.com). |
| Hapus Ekstensi .php | RewriteEngine On |
Memungkinkan akses file PHP tanpa harus menuliskan ekstensi .php di URL. |
| Redirect Halaman Lama | RewriteEngine On |
Memindahkan pengunjung dari URL lama ke URL baru secara permanen. |
Implementasi Teknis dalam File .htaccess
Berikut adalah contoh penerapan beberapa aturan sekaligus di dalam file .htaccess yang ditempatkan pada direktori root web server:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# 1. Alihkan HTTP ke HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# 2. Hilangkan ekstensi .php pada URL
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([a-zA-Z0-9-_]+)$ $1.php [L]
</IfModule>
Penjelasan Bendera (Flags) RewriteRule
Setiap aturan diakhiri dengan tanda kurung siku yang berisi bendera (flags) untuk memandu bagaimana Apache memproses permintaan tersebut:
- [L] (Last): Menghentikan pemrosesan aturan rewrite lebih lanjut jika kondisi saat ini cocok. Mencegah aturan di bawahnya dieksekusi berulang.
- [R=301] atau [R=302]: Mengirimkan respons pengalihan (redirect) ke peramban pengguna. 301 untuk pengalihan permanen, sedangkan 302 untuk sementara.
- [NC] (No Case): Membuat pencocokan ekspresi reguler mengabaikan huruf besar atau kecil (case-insensitive).
- [QSA] (Query String Append): Menambahkan parameter query string dari URL asli ke URL hasilrewrite.
Troubleshooting Masalah Apache Rewrite
Jika aturan rewrite Anda tidak berfungsi atau menyebabkan kesalahan HTTP 500 (Internal Server Error), periksa langkah-langkah berikut:
- Pastikan modul
mod_rewritesudah aktif di server Apache Anda. - Periksa apakah file
.htaccessterbaca oleh server dengan melihat konfigurasiAllowOverridepada file konfigurasi utama Apache (misalnyaapache2.confatauhttpd.conf). - Nyalakan log debug rewrite dengan perintah
LogLevel alert rewrite:trace3di virtual host untuk melacak bagaimana Apache memproses ekspresi reguler baris per baris.