Contoh Apache Rewrite Rule dan Panduan Konfigurasi

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
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Mengalihkan seluruh lalu lintas HTTP ke versi HTTPS yang aman.
Force www RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Memaksa domain tanpa www (contoh.com) menjadi menggunakan www (www.contoh.com).
Hapus Ekstensi .php RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^/]+)/?$ $1.php [L]
Memungkinkan akses file PHP tanpa harus menuliskan ekstensi .php di URL.
Redirect Halaman Lama RewriteEngine On
RewriteRule ^lama-page\.html$ /halaman-baru.php [R=301,L]
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:

  1. Pastikan modul mod_rewrite sudah aktif di server Apache Anda.
  2. Periksa apakah file .htaccess terbaca oleh server dengan melihat konfigurasi AllowOverride pada file konfigurasi utama Apache (misalnya apache2.conf atau httpd.conf).
  3. Nyalakan log debug rewrite dengan perintah LogLevel alert rewrite:trace3 di virtual host untuk melacak bagaimana Apache memproses ekspresi reguler baris per baris.