Tips modrewrite

Posted on Agustus 6, 2008. Filed under: Tutorial Programming | Tag:, , , |

para dewa2 php pasti udah banyak yang tahu, jadi ini topik khusus untuk para newbie yang pengen buat url kyk di wordpress ( http://blabla.com/archive/2002-19-05/title/bla )

pertama tama, mod_rewrite adalah sebuah module di apache, dan biasanya di package2 php yg ada sekarang (xampp, phptriad, dll) module ini belum di load secara default, jadi kita harus mengenable module ini dulu (dan tenang saja, biasanya di server2 sekarang, module ini sudah dienabled)
cara mengenable module ini adalah dengan membuka file httpd.conf di folder apache. kemudian cari line :

#LoadModule rewrite_module modules/mod_rewrite.so

hapus tanda #

save file, kemudian restart apachenya. Sekarang kita sudah bisa menjalankan mod_rewrite di windows kita😀

untuk menjalankan mod_rewrite, di folder yang berisi halaman web kita, kita buat file dengan nama .htaccess
mod rewrite harus selalu diawali dengan perintah :

RewriteEngine on

Kemudian kita buat peraturannya. Contohnya :

RewriteRule ^([a-zA-Z]+)/?$ index.php?page=$1

untuk membuat rule baru, kita tulis RewriteRule. kemudian, kita gunakan tanda ^ untuk memulai rule tersebut.
([a-zA-Z]+) berarti membatasi agar karakter yang diterima hanya berupa huruf a sampai z baik itu huruf besar atau bukan. tanda + berarti karakter tersebut boleh lebih dari 1. tanda /?$ adalah akhir dari rule tersebut. sebenarnya kita cukup menuliskan /$ tanpa tanda ? tapi apabila user memasukkan url misalnya: http://domain.com/about maka browser akan merespon dengan error karena tidak ada tanda / di akhir url. dengan menambahkan ? di rule kita tadi, maka kita mengijinkan url tanpa / di akhirannya.

selanjutnya, kita tinggal memberi kondisinya, yaitu index.php?page=$1. jadi apabila ada user menuliskan : http://domain.com/about/ maka mod_rewrite akan mengubahnya menjadi http://domain.com/index.php?page=about (di background tentunya).

begitu juga dengan rule yang lebih panjang seperti :

Code:
RewriteRule ^([a-zA-Z]+)/([0-9-]+)/([a-zA-Z]+)/?$ index.php?page=$1&id=$2&action=$3

yang akan mengganti
http://domain.com/archive/37/open/ menjadi http://domain.com/index.php?page=archive&id=37&action=open

moga2 berguna tipsnya😀
hampir lupa, kalau menggunakan metode ini, kekurangannya adalah, semua file yang direfer dari luar misal <img>, css, script dll, maka harus menggunakan absolute url. jadi instead of : <img src=”img/blabla.jpg” alt=”” /> harus diganti jadi : <img src=”http://domain.com/img/blabla.jpg&#8221; alt=”” />

untuk membuat rule baru, kita tulis RewriteRule. kemudian, kita gunakan tanda ^ untuk memulai rule tersebut.
([a-zA-Z]+) berarti membatasi agar karakter yang diterima hanya berupa huruf a sampai z baik itu huruf besar atau bukan. tanda + berarti karakter tersebut boleh lebih dari 1. tanda /?$ adalah akhir dari rule tersebut. sebenarnya kita cukup menuliskan /$ tanpa tanda ? tapi apabila user memasukkan url misalnya: http://domain.com/about maka browser akan merespon dengan error karena tidak ada tanda / di akhir url. dengan menambahkan ? di rule kita tadi, maka kita mengijinkan url tanpa / di akhirannya.

selanjutnya, kita tinggal memberi kondisinya, yaitu index.php?page=$1. jadi apabila ada user menuliskan : http://domain.com/about/ maka mod_rewrite akan mengubahnya menjadi http://domain.com/index.php?page=about (di background tentunya).

begitu juga dengan rule yang lebih panjang seperti :

Code:
RewriteRule ^([a-zA-Z]+)/([0-9-]+)/([a-zA-Z]+)/?$ index.php?page=$1&id=$2&action=$3

yang akan mengganti
http://domain.com/archive/37/open/ menjadi http://domain.com/index.php?page=archive&id=37&action=open

moga2 berguna tipsnya😀
hampir lupa, kalau menggunakan metode ini, kekurangannya adalah, semua file yang direfer dari luar misal <img>, css, script dll, maka harus menggunakan absolute url. jadi instead of : <img src=”img/blabla.jpg” alt=”” /> harus diganti jadi : <img src=”http://domain.com/img/blabla.jpg&#8221; alt=”” />

Sebagai bahan tambahan, untuk memanfaatkan fitur mod-rewrite, persyaratan mutlak adalah memahami regular expression (regex) dengan format Perl (bukan POSIX).

Kemudian untuk mencegah terjadinya pesan kesalahan “500 Internal Server Error” saat page request, sebaiknya instruksi perintah mod-rewrite diapit dengan perintah preprocessor IfModule milik Apache. Contoh:
Code:

RewriteEngine On
# (optional) RewriteBase /
RewriteCond …
RewriteRule …

Jika penggunaan mod-rewrite juga ingin digunakan pula di .htaccess, pastikan agar setting AllowOverride untuk direktori web yang diatur di file konfigurasi Apache (httpd.conf) di-set minimal ke Options. Contoh:
Code:

AllowOverride Options
# atau …
# AllowOverride All

Jika ruleset pada mod-rewrite (perintah RewriteRule) hanya mengacu kepada kondisi statis atau unik, disarankan akhiri dengan L flag, agar Apache tidak meng-evaluate seluruh kondisi sampai akhir. Contoh:
Code:
RewriteRule [L]
RewriteRule [L]

Sangat disarankan untuk membaca referensi mod-rewrite di dokumentasi Apache karena ada beberapa aturan dan tips yang bisa ditemui disana, misal mengkombinasikan ruleset dengan query string dan variabel environment Apache.

Terakhir, jika web server memberi respon “500 Internal Server Error” saat anda bermain-main dengan mod-rewrite, berarti ada sintaks yang keliru. So, jangan panik dulu karena tidak ada yang salah dengan web servernya sendiri.

Selamat mencoba.

Make a Comment

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

Liked it here?
Why not try sites on the blogroll...

%d blogger menyukai ini: