Pada artikel yang lalu kita telah membahas beberapa contoh pemakaian file .htaccess untuk mengontrol akses direktori, membuat custom error document, serta menampilkan isi direktori pada website. Selain itu kita juga sudah membahas sedikit tentang teknik melakukan URL Rewriting menggunakan file .htaccess.
Nah, kali ini kita akan membicarakan lebih jauh teknik URL Rewriting yang jauh lebih kompleks dan tentunya lebih sulit dibandingkan dengan contoh-contoh sebelumnya. Biar lebih cepat mengerti, saya sarankan agar Anda membaca sambil mempraktikkan contoh yang ada di artikel ini.
Perhatikan contoh berikut ini:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
Contoh di atas merupakan isi file .htaccess yang dibuat oleh WordPress pada saat kita mengaktifkan fitur permalink melalui menu Settings – Permalinks. Tahukah Anda apa maksud dari kode di atas?
Maksudnya yaitu semua request ke web server akan dilayani oleh file index.php, kecuali request tersebut berupa file atau direktori. TidakĀ peduli apa pun alamat URL yang diminta oleh user, asalkan masih berada pada domain web server tersebut dan bukan file atau direktori akan diarahkan ke file index.php.
Anda bisa memodifikasi kode .htaccess di atas agar bisa dipraktekkan pada direktori tertentu. Contohnya bisa Anda lihat berikut ini.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
</IfModule>
Sengaja pernyataan RewriteBase saya hilangkan agar file .htaccess tersebut bisa berfungsi pada sembarang direktori. Begitu pula dengan index.php, tanda garis miring (/) saya hapus. Dengan asumsi bahwa file .htaccess tersebut diletakkan pada direktori latihan, maka jika kita mengetikkan URL:
http://localhost/latihan/testing
maka permintaan (request) tersebut akan dialihkan ke file index.php, asalkan file atau direktori dengan nama testing tersebut tidak ada. Begitu juga dengan request yang lain. Itu semua terjadi karena adanya pernyataan RewriteCond pada file .htaccess tersebut.
Apa Itu RewriteCond?
RewriteCond merupakan salah satu directive pada modul mod_rewrite yang berguna untuk mengecek kondisi tertentu. Format pemakaiannya adalah sebagai berikut:
RewriteCond TestString CondPattern
TestString adalah string URL yang akan diperiksa, sedangkan CondPattern adalah pola yang digunakan untuk memeriksa. Jika TestString yang diperiksa tersebut cocok dengan pola pada CondPattern maka aturan pada RewriteRule akan dieksekusi. Dokumentasi yang lengkap mengenai RewriteCond ini bisa Anda baca di situs Apache.
RewriteRule dan Regular Expression
Pada umumnya kita menggunakan directive RewriteRule dengan sintaks seperti berikut:
RewriteRule Pattern Substitution [Flags]
Apa yang dimaksud dengan Pattern, Substitution dan Flags? Silakan Anda baca penjelasannya di dokumentasi Apache. Saya rasa di situs tersebut sudah dijabarkan dengan sangat jelas, jadi saya tidak perlu capek-capek lagi membahasnya di sini.
Ada hal lain yang lebih menarik untuk dibahas, yaitu bagaimana cara menggunakan regular expression pada RewriteRule. Sebagai contoh, anggaplah kita mempunyai sebuah halaman web dinamis dengan alamat URL sebagai berikut:
http://example.com/articles.php?category=internet&article_id=1234
Kita ingin mengubah alamat URL di atas agar terlihat menarik dan lebih mudah di-indeks oleh search engine atau istilahnya search engine friendly, seperti berikut ini:
http://example.com/articles/internet/1234
Pertanyaannya sekarang, bagaimana cara menuliskan aturannya pada file .htaccess? Oke, untuk sementara lupakan dulu .htaccess. Sekarang kita buat terlebih dulu halaman web dengan nama articles.php. Contohnya adalah sebagai berikut:
<?php
$category = $_GET['category'];
$article_id = $_GET['article_id'];
?>
<html>
<head>
<title>Tes URL Rewriting</title>
</head>
<body>
<p>Kategori : <?php echo $category ?></p>
<p>ID Artikel : <?php echo $article_id ?></p>
</body>
</html>
Kalau kita akses program di atas melalui web browser, akan ditampilkan nama kategori dan ID dari artikel sesuai dengan parameter yang diberikan pada URL-nya. Nah, sekarang kita buat aturan pada file .htaccess dengan regular expression seperti tujuan semula.
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^articles/(w+)/([0-9]+)$ articles.php?category=$1&article_id=$2
</IfModule>
Perhatikan penulisan Pattern pada aturan tersebut. Pola yang digunakan pada RewriteRule di atas yaitu:
^articles/(w+)/([0-9])$
Pola seperti itu disebut dengan regular expression. Untuk lebih jelasnya, kita bisa membagi pola tersebut menjadi tiga bagian, yaitu ^articles/, (w+)/, dan ([0-9])$.
^articles/artinya cek jika request dimulai dengan string “articles/”(w+)/artinya cek jika bagian tersebut berupa kata tunggal dan diikuti dengan tanda garis miring (/). Pemberian tanda kurung mengandung maksud bahwa pola di dalam tanda kurung tersebut disimpan dalam variabel khusus dan bisa diakses memakai parameter $1, $2 dan seterusnya sesuai dengan urutannya.([0-9])$artinya cek jika bagian akhir dari pola tersebut berupa angka.
Nah, sekarang kita bisa mengakses halaman web tersebut menggunakan alamat URL yang baru.
(bersambung)


Kuro! | March 2nd, 2010 jam 1:42 pm
ditunggu kelanjutannya mas
saya sudah baca dari awal hingga akhir
*berasa ikut kuliah PHP di kampus*
Wahyu Wibowo | March 3rd, 2010 jam 2:08 am
Sabar mas, baru dipersiapkan nih. Oh, ya minggu depan quiz ya pelajari baik-baik materinya….
Irwan | March 31st, 2010 jam 12:39 am
Saya mau tanya :
bagaimana kalo link saya contoh di index.php adalah
Item 1234
Nah….saya maunya ketika kursor di sentuh pada Item 1234 menjadi :
http://example.com/articles/internet/1234
Gimana carnya ya. Kok saya cari tutor gak ketemu2 atau saya yg gak paham.
Mohon diemail ya ke : irwansaputra.ws@gmail.com
Sebelum dan sesudahnya saya ucapkan trims