Apache Mod Rewrite Rules: Panduan Aturan & Contoh Syntax

Modul mod_rewrite pada web server Apache adalah pustaka berbasis aturan (rule-based rewriting engine) yang menggunakan parser ekspresi reguler (regular expression) untuk mengarahkan ulang (redirect) permintaan URL secara dinamis saat diterima. Modul ini menjadi fondasi utama dalam optimalisasi Search Engine Optimization (SEO), pembuatan URL yang bersih (clean URLs), serta pengamanan direktori web melalui file konfigurasi .htaccess atau blok <Directory>.

Untuk mengaktifkan modul ini pada lingkungan server Linux berbasis Debian/Ubuntu, administrator sistem perlu menjalankan perintah terminal sudo a2enmod rewrite dan melakukan restart layanan Apache via sudo systemctl restart apache2. Setiap aturan tulis ulang wajib diawali dengan deklarasi pengaktifan mesin RewriteEngine On sebelum parameter kondisi (RewriteCond) dan aturan utama (RewriteRule) dieksekusi.

Sintaks Dasar dan Struktur Mod Rewrite

Struktur penulisan aturan pada mod_rewrite mengikuti pola baku yang terdiri dari direktif, pola pencocokan (pattern), target substitusi (substitution), dan flag opsional:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^old-page\.html$ /new-page.php [R=301,L]

Penjelasan parameter di atas:

  • RewriteEngine On: Mengaktifkan mesin tulis ulang URL pada konteks saat ini.
  • RewriteCond: Menetapkan kondisi tambahan (dalam contoh di atas: jika file atau direktori fisik tidak ditemukan).
  • RewriteRule: Pola URL yang dicari (regex) diikuti URL tujuan pengganti.
  • [R=301,L]: Flag yang menginstruksikan pengalihan permanen (Redirect 301) dan menghentikan pemrosesan aturan selanjutnya (Last).

Tabel Referensi Flag Mod Rewrite Populer

Berikut adalah tabel parameter flag yang paling sering digunakan dalam konfigurasi produksi:

Flag Nama Panjang Fungsi Utama
[L] Last Menghentikan pemrosesan aturan rewrite jika kondisi terpenuhi.
[R=301] / [R=302] Redirect Memaksa browser melakukan HTTP redirect eksternal (Permanen 301 atau Sementara 302).
[NC] No Case Membuat pola pencocokan URL mengabaikan perbedaan huruf besar/kecil (case-insensitive).
[QSA] Query String Append Menambahkan query string dari URL lama ke URL tujuan hasil rewrite.
[F] Forbidden Mengembalikan status HTTP 403 Forbidden ke peramban pengguna.

Contoh Kasus Penerapan Rewrite Rules

1. Pengalihan HTTP ke HTTPS

Mengarahkan seluruh trafik pengunjung dari protokol tidak aman (HTTP) ke enkripsi SSL/TLS (HTTPS) secara otomatis:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

2. Menghilangkan Ekstensi File .php

Memungkinkan pengguna mengakses halaman web tanpa harus mengetikkan ekstensi .php di bilah alamat browser:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]

3. Redirect Domain Tanpa www ke www (atau Sebaliknya)

Menyeragamkan kanonisasi domain untuk mencegah duplikasi konten di mesin pencari:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

Troubleshooting & Kesalahan Umum

Kesalahan paling sering terjadi saat menyusun aturan mod_rewrite adalah terjadinya pengalihan tanpa akhir (infinite redirect loop). Hal ini biasanya disebabkan oleh aturan RewriteRule yang mencocokkan URL tujuan itu sendiri secara berulang. Untuk mendiagnosis masalah di lingkungan pengembangan, aktifkan pencatatan log dengan perintah LogLevel alert rewrite:trace3 pada konfigurasi virtual host Apache guna melacak proses pencocokan ekspresi reguler baris per baris.