Regex untuk URL Rewriting Apache: Panduan Sintaks & Contoh

URL rewriting pada server web Apache dikendalikan oleh modul mod_rewrite menggunakan ekspresi reguler (regex) untuk memetakan URL yang diminta pengunjung ke skrip atau direktori internal yang diinginkan. Inti dari konfigurasi ini terletak pada penggunaan arahan RewriteCond untuk menetapkan kondisi dan RewriteRule untuk menerapkan aturan pengubahan URL berdasarkan pola regex yang cocok.

Penggunaan regex yang tepat memastikan performa server tetap optimal dan mencegah celah keamanan seperti perulangan pengalihan (infinite redirect loops). Aturan dasar mencakup penentuan pola awal URL, penggunaan tanda kurung penangkap (capturing groups), serta penerapan bendera (flags) seperti [L] (Last) dan [R=301] (Permanent Redirect) untuk mengontrol perilaku eksekusi server.

Sintaks Dasar Mod_Rewrite dan Regex Apache

Sebelum menulis aturan pengalihan, pastikan modul mod_rewrite telah diaktifkan pada server Apache Anda (biasanya melalui perintah a2enmod rewrite pada sistem Ubuntu/Debian). Setiap aturan RewriteRule memerlukan pola pencocokan URL dan target penggantian.

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    
    # Contoh: Mengarahkan index.php ke root domain
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*index\.php\ HTTP/
    RewriteRule ^index\.php$ / [R=301,L]
</IfModule>

Tabel Karakter Khusus Regex Apache (Metakarakter)

Dalam menyusun pola URL rewriting Apache, Anda wajib memahami karakter khusus regex yang sering digunakan untuk mencocokkan struktur direktori dan parameter kueri:

Karakter Regex Fungsi / Makna dalam Apache Contoh Penggunaan
^ Menandakan awal dari string URL. ^profile/ mencocokkan URL berawalan 'profile/'.
$ Menandakan akhir dari string URL. \.html$ mencocokkan URL yang berakhiran '.html'.
. Mencocokkan sembarang karakter tunggal. f.o mencocokkan 'foo', 'fao', 'f9o'.
* Mencocokkan karakter sebelumnya sebanyak 0 kali atau lebih. ab*c mencocokkan 'ac', 'abc', 'abbc'.
+ Mencocokkan karakter sebelumnya sebanyak 1 kali atau lebih. ab+c mencocokkan 'abc', 'abbc', tetapi tidak 'ac'.
? Membuat karakter sebelumnya bersifat opsional (0 atau 1 kali). colou?r mencocokkan 'color' dan 'colour'.
[] Menentukan kumpulan karakter (character class). [0-9]+ mencocokkan satu atau lebih digit angka.
() Grup penangkap (capturing group) untuk referensi balik $1, $2. ^user/([0-9]+)$ menangkap ID pengguna.

Contoh Kasus Penggunaan Nyata (Common Recipes)

1. Memaksa Penggunaan HTTPS (SSL Redirect)

Aturan ini memastikan seluruh lalu lintas HTTP diarahkan secara permanen ke protokol HTTPS yang aman.

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

2. Menghilangkan Ekstensi .php dari URL (Clean URL)

Mengubah akses URL dari namadomain.com/tentang.php menjadi namadomain.com/tentang.

# Cek apakah file fisik dengan ekstensi .php ada
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([a-zA-Z0-9_-]+)$ $1.php [L]

3. Mengarahkan URL dengan Parameter Dinamis ke Format Bersih

Mengubah namadomain.com/article.php?id=42 menjadi namadomain.com/article/42.

RewriteRule ^article/([0-9]+)$ article.php?id=$1 [L,QSA]

Catatan: Bendera [QSA] (Query String Append) digunakan agar parameter kueri tambahan tetap diteruskan jika ada.

Tips Troubleshooting Lapangan

Jika aturan rewrite Anda tidak berfungsi atau memicu kesalahan Internal Server Error (500), lakukan langkah-langkah pemeriksaan berikut:

  • Periksa Log Error: Selalu pantau file error.log Apache untuk melihat pesan kesalahan spesifik dari mod_rewrite.
  • Aktifkan Logging Terperinci: Tambahkan perintah RewriteLog dan RewriteLogLevel (pada Apache versi lama) atau gunakan arahan LogLevel alert rewrite:trace3 (pada Apache 2.4) di dalam file konfigurasi virtual host untuk melacak bagaimana regex memproses URL langkah demi langkah.
  • Perhatikan Urutan Aturan: Apache mengeksekusi aturan dari atas ke bawah. Aturan yang lebih spesifik harus diletakkan di bagian atas sebelum aturan umum.
  • Konflik AllowOverride: Pastikan direktori utama Anda di dalam file konfigurasi utama Apache (httpd.conf atau apache2.conf) mengizinkan pembacaan file .htaccess dengan menetapkan AllowOverride All.