How to use mod_rewrite in Apache

mod_rewrite adalah modul dari server web Apache yang memungkinkan memanipulasi (mengubah) URL yang diminta oleh klien sebelum permintaan tersebut benar-benar diproses oleh server. Modul ini dapat dikonfigurasi baik melalui file konfigurasi virtual host ataupun melalui file .htaccess

Dengan menggunakan mod_rewrite, Anda dapat membuat aturan-aturan kompleks untuk keperluan seperti

  • Search Engine Optimization (SEO): Memastikan URL ramah SEO untuk meningkatkan peringkat pencarian.
  • Simplified Navigation: Membuat URL yang lebih pendek dan mudah diingat untuk meningkatkan pengalaman klien.
  • Security: Menyembunyikan struktur direktori dan file asli untuk mengurangi risiko keamanan.

How URL Rewriting works

Sytax untuk aturan RewriteRule.

RewriteRule pattern substitution [flags]
  • Pattern: Ini adalah ekspresi regular yang cocok dengan URL yang ingin ditulis ulang.
  • Substitution: Ini adalah URL yang ingin Anda alihkan.
  • Flags: parameter opsional yang digunakan untuk mengubah fungsionalitas aturan.

Contoh.

RewriteEngine on
RewriteRule ^about.html$ aboutus.html [NC]

Aturan tersebut akan mengarahkan klien yang mengakses halaman about.html ke aboutus.html dengan tambahan flags [NC] agar berlaku huruf besar dan kecil (case-insensitive).

More Complex Examples

Misalkan Anda memiliki situs dinamis dimana profil pengguna diakses melalui URL www.example.com/profile.php?user=username dan Anda dapat mengubahnya menjadi www.example.com/username agar lebih ramah pengguna dengan menerapkan aturan berikut.

RewriteEngine on
RewriteRule ^([a-zA-Z0-9_-]+)$ profile.php?user=$1

Rewriting URLs for Pagination

Katakanlah Anda memiliki blog yang menampilkan postingan dengan URL seperti www.example.com/blog?page=2. Anda dapat membuatnya lebih mudah dibaca dan ramah SEO dengan mengubahnya menjadi www.example.com/blog/page/2.

RewriteEngine on
RewriteRule ^blog/page/([0-9]+)$ blog.php?page=$1

Removing File Extensions

Untuk menghapus ekstensi .php dari URL agar terlihat lebih bersih.

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

Ini akan membuat URL seperti www.example.com/about.php menjadi dapat diakses dengan www.example.com/about

Preventing Image Hotlinking

Hotlinking adalah praktik dimana suatu situs web dapat menggunakan resource seperti gambar langsung di situs yang Anda miliki. Sehingga hal ini dapat menghabiskan bandwidth dan memperlambat situs. Anda bisa mencegah dengan menggunakan aturan berikut.

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourwebsite.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]

Backreferencing Jika Anda memiliki situs seperti toko online yang menampilkan produk dengan URL seperti http://example.com/request.php?id=foo&name=bar. Anda dapat mengubahnya menjadi http://example.com/product/foo/bar agar lebih mudah dibaca dengan aturan berikut.

RewriteEngine On
RewriteRule ^product/([A-Za-z]+)/([A-Za-z]+)$ request.php?id=$1&name=$2

Aturan tersebut mengambil pola dari tanda kurung dan menyimpannya dalam variabel referensi $1 dan $2

Referensi: