Make up, cosmetic, baju bermerek, Louis Vuitton, Prada, Rolex.
Tampil indah, sesuatu yang diinginkan semua orang. Memang merek dan
tampilan bukanlah segalanya. Tetapi merek dan tampilan dapat
menghasilkan sesuatu yang tidak bisa didapatkan dengan cara lain.
Status. Hal ini tidak terkecuali dengan website. Anda ingin URL yang
tampil secara indah. Tetapi URL yang indah tidaklah “murah”.
Bila anda mendengar kata URL Rewriting, hal pertama yang di
bayangkan adalah .htaccess. Beberapa server menampilkan URL secara
berbeda dan beberapa bahasa coding dan framework seperti Ruby on Rails
misalnya juga memiliki aturan yang berbeda. Tetapi dalam article ini,
kita akan membahas metode URL Rewriting yang paling umum yaitu dengan
menggunakan file .htaccess yang sering digunakan bersamaan dengan bahasa
coding PHP.
Mungkin anda bertanya, apakah saya memerlukan teknologi ini? Sebuah
pengetahuan umum adalah bahwa .htaccess merupakan teknologi yang hebat
tetapi menjengkelkan. Hampir tidak ada tutorial yang jelas dan mudah
dimengerti mengenai topik ini. Tanpa teknologi ini, aplikasi web anda
dapat berjalan dengan lancar. Kesulitan yang harus dihadapi dengan
.htaccess merupakan mahal harga yang perlu dibayar untuk membeli merek
ini.
Sama seperti Louis Vuitton, anda tidak memerlukannya tetapi merek ini
akan merefleksikan sebuah status. Facebook saat baru diluncurkan
menampilkan halaman profilenya tanpa menggunakan URL Rewriting. Halaman
profile Facebook akan tampil seperti facebook.com?profile=123143414325
dimana angka acak tersebut merupakan id profile anda. Setelah Facebook
dipakai jutaan orang di dunia, Facebook memerlukan sesuatu yang dapat
merefleksikan status yang sekarang Facebook miliki. Sekarang profile
anda bertulis facebook.com/john.smith dimana nama John Smith
merupakan sebuah contoh yang nanti akan bertulis nama anda saat saya
mengunjungi profile Facebook anda. Tampilan yang cantik dan “mahal” ini
akan memberikan status kepada website dan aplikasi web anda.
Kabar gembira, teknologi ini tidak “mahal” dalam hal moneter
melainkan “mahal” dalam hal ilmu dan ini bisa anda dapatkan bila anda
memiliki kesabaran, latihan dan tentunya sebuah niat.
The Fundemental
Metode URL Rewriting yang kita gunakan menggunakan sebuah fitur yang
disediakan server yang menjalankan Apache. Artinya bila anda menggunakan
Windows anda memerlukan WAMP atau XAMP nyala dan bila anda menggunakan
OSX anda memerlukan MAMP atau XAMP nyala. Untungnya hampir semua host
server memiliki support bagi Apache.
Cara memulai adalah dengan membuat sebuah file bernama .htaccess dan
file ini harus disimpan di root dari folder website anda. Ingat nama file hanya .htaccess tanpa ada format file apapun. Hati-hati juga karena terkadang file .htaccess akan dihide secara otomatis dan anda perlu melakukan setting di komputer anda agar anda dapat melihat hidden files.
.htaccess sendiri merupakan sebuah file konfigurasi milik Apache
dimana kita dapat memberikan rules dan command pilihan kita sendiri yang
nantinya akan diaplikasikan ke semua file dan sub-folder di dalam
folder dimana file .htaccess berada. Didalam .htaccess sendiri kita
menggunakan sebuah modul milik Apache bernama
mod_rewrite
. Sebelum melakukan metode ini, pastikan anda memiliki modul mod_rewrite
. Tetapi tidak perlu dipusingkan karena hampir semua virtual server dan web host memiliki modul ini.Memulai Dengan htAccess
Untuk memulai, tulis command ini di baris pertama di dalam file .htaccess anda:
RewriteEngine On
Baris command ini akan memulai modul
mod_rewrite
. Di
bawah baris ini kita bisa menulis semua rule dari URL rewrite yang kita
perlukan. Rule dari URL rewrite dasarnya adalah seperti ini:RewriteRule URL/yang/ingin/di/cocokan URL/yang/digunakan/bila/cocok [option]
Contohnya adalah seperti ini:
RewriteRule ^about/me$ /about/index.html [L]
Rule di atas mengartikan kalau bila pengunjung membuka halaman example.com/about/me, maka akan ditampilkan halaman dari example.com/about/index.html.
[L]
sendiri merupakan sebuah option yang akan dibahas lebih dalam nantinya.Rewriting
Code yang dicontohkan tadi merupakan sebuah contoh dari rewriting. Hal ini berbeda dengan redirects.
Secara default, web server akan membuat sebuah URL kepada setiap file yang anda upload. Misalkan anda ingin mengakses example.com/about/index.html maka server akan mengarahkan ke folder root example.com, masuk ke folder about dan akan menampilkan halaman index.html.
Redirect berbeda dengan Rewrite. Misalkan example.com/about/index.html diredirect ke example.com/contact/index.html. Saat mengunjungi example.com/about/index.html, server akan membuka folder about dan ingin menampilkan file index.html. Tetapi saat server ingin menampilkan index.html, server membaca redirect rule yang digunakan dan hasilnya, server akan kembali menavigasi ulang ke example.com, membuka folder contact dan akhirnya menampilkan file index.html yang berada di dalam folder contact. URL anda pun akan berubah sesuai dengan URL yang dituju oleh redirect.
Untuk rewrite, cara web server menavigasikan URL file sedikit
berbeda. Setelah menulis sebuah rewrite rule, saat ada request untuk example.com/about/me, server akan menggunakan file index.html yang berada di dalam folder about. Dengan begitu, anda memberikan URL baru kepada file index.html.
Dengan metode ini, akan dapat memberikan berbagai macam URL cantik
bagi semua halaman website anda. Ingat, rules dasarnya adalah seperti
ini:
RewriteRule ^untuk/url/ini/$ /gunakan/file/ini.php [L]
Matching Patterns
Bila anda melihat rule di atas, ada beberapa character asing seperti
^
dan $
.
Kedua character ini merupakan bagian dari pattern yang harus di gunakan
saat melakukan URL matching. Ada sebuah alasan mengapa kita harus
menggunakan sebuah pattern. Contoh di atas, kita mengarahkan sebuah link
absolute ke sebuah link absolute lainnya. Walaupun cara ini berkerja,
bayangkan bila website anda memiliki banyak sekali halaman. Anda tidak
mungkin membuat sebuah rule khusus untuk setiap halaman. Tambah lagi
website yang dynamis dengan content yang terus bertambah. Anda tidak
mungkin membuat sebuah rule secara manual saat ada content yang baru
dirilis. Membuat sebuah web app dengan URL cantik menjadi tidak
memungkinkan. Oleh karena itu kita menggunakan pattern dimana bilah link
yang direquest cocok dengan pattern yang kita tentukan, server akan
menampilkan file sesuai dengan aturan dari pattern yang sudah kita
tentukan.
Perlu diketahui, pattern yang digunakan oleh modul
mod_rewrite
diketahui dengan nama Perl Compatible Regular Expression (PCRE) atau singkatnya juga diketahui dengan nama regex atau regexp. Regex bisa anda pelajari sendiri juga. Berbeda dengan htaccess yang jumlah tutorialnya sedikit, ada banyak tutorial mengenai regex. Untuk lebih banyak tutorial anda juga dapat mencari di Google dengan kata kunci regex atau regexp.
Disclaimer: Perlu saya peringati, agar lebih gampang mengartikan cara
mod_rewrite
menyamakan pattern, ada baiknya anda mengetahui dasar bahasa
programming secara umum dikarenakan consep dasar seperti apa itu string
dan variable akan digunakan. Lebih baik lagi bila anda memiliki sedikit
pengetahuan mengenai dasar dari bahasa coding PHP, terutama konsep $_GET
.
Kita sudah mengetahui dua regex character.
^
- Mencocokan awal sebuah string.$
- Mencocokan akhir dari sebuah string.
Character
^
dan $
harus digunakan agar kita
yakin kalau URL yang dicocokan merupakan URL itu sepenuhnya dari awal
sampai akhir dan bukan hanya sebagian dari URL.[0-9]
- Mencocokan angka 0 sampai 9. [1-4]
akan mencocokan angka 1 sampai 4.[a-z]
- Mencocokan huruf kecil a sampai z.[A-Z]
- Mencocokan huruf besar A sampai Z.[a-z0-9]
- Aturan-aturan di atas bisa digabungkan. Aturan ini mencocokan huruf kecil a sampai z dan angka 0 sampai 9.
Rules diatas adalah pattern yang kita sebut sebagai character group.
Rules ini akan mencocokan semua character yang sesuai dengan huruf atau
angka yang ada di dalam bracket. Anda dapat menggunakan character apapun
dengan jarak sesuai yang ditunjukan di atas di dalam bracket.
Tetapi rules di atas hanya mencocokan satu character.
[0-9]
akan mencocokan angka 5 tetapi tidak akan mencocokan angka 54. Untuk mencocokan angka 54 kita harus menggunakan [0-9]
dua kali.[0-9][0-9]
Untuk mencocokan 2014 kita dapat melakukan ini:
[0-9][0-9][0-9][0-9]
Tapi ini menjadi melelahkan maka kita dapat melakukan ini:
[0-9]{4}
Tetapi sering kali kita tidak tahu berapa jumlah angka yang ingin
kita cocokan. Contohnya ID dari sebuah article. Oleh karena itu kita
dapat menggunakan character
+
yang berarti satu kali atau lebih.[0-9]+
Sekarang kita dapat mencocokan angka 123456 dan juga 123456789.
Mempraktekan htAccess
Kita ingin mencocokan URL untuk article di website kita dan di rewrite dengan halaman article.php. URLnya akan memiliki pattern seperti ini:
2014/judul-article/
URL yang ingin dicocokan di awali dengan empat angka yang menyatakan tahun, diikuti dengan garis miring, diikuti lagi dengan slug
dari judul article dan di akhiri dengan sebuah garis miring lagi.
Dengan begitu kita dapat menulis aturan regex untuk dicocokan seperti
ini:
^[0-9]{4}/[a-z0-9-]+/$
Mari kita perhatikan aturan regex di atas. Pertama kita memulai sebuah string dengan
^
dan kita akhiri stringnya juga dengan $
agar dipastikan kalau URL yang dicocokan dibaca secara keseluruhan. URL diawali dengan empat angka [0-9]{4}
.
Lalu diikuti oleh sebuah garis miring. Setelah itu kita dapat
mencocokan character apapun yang berhuruf kecil dari a sampai z atau
angka 0 sampai 9 atau sebuah dash [a-z0-9-]
. Karena jumlah character dari sebuah slug selalu berbeda, kita gunakan juga character +
.
Mengikuti URL yang ingin dicocokan, kita akhiri dengan garis miring dan
seperti yang dikatakan tadi string ini harus diakhiri dengan $
. Oleh karena itu URL diakhiri dengan /$
.
Menulis rewrite rule ini secara sepenuhnya, kita memiliki rule seperti ini:
RewriteRule ^[0-9]{4}/[a-z0-9-]+/$ /article.php
Kita hampir selesai. Kita sudah dapat mencocokan URL apapun yang sesuai dengan pattern yang kita buat untuk menggunakan file article.php. Sekarang kita tinggal memastikan kalau article.php menampilkan halaman yang benar.
Capturing groups, and replacements
Saat menulis sebuah halaman dengan PHP menggunakan metode
$_GET
, kita memerlukan data dari URL. Biasanya bagian dari URL diambil dan dibaca sebagai query string. Contohnya kita ingin menampilkan sebuah article di halaman article.php. URL yang digunakan bentuknya biasanya seperti ini:/article.php?year=2014&slug=judul-article
Oleh karena itu saat mencocokan URL, kita harus tetap bisa melempar
data penting dari URL ke file yang ingin kita tampilkan. Caranya adalah
dengan menerapkan tanda kurung di pattern yang ingin digunakan. Ini
disebut dengan capturing group. Bila anda mengerti bahasa coding, konsepnya mirip dengan konsep variable.
Pattern yang kita buat tadi setelah diberi tanda kurung akan menjadi seperti ini:
^([0-9]{4})/([a-z0-9-]+)/$
Untuk menerapkan capturing groups ke file yang ingin kita tampilkan kita gunakan symbol
$
diikuti dengan nomor dari group yang kita ingin gunakan. Nomor akan
otomatis berurut dari capturing group pertama. Berarti capturing group $1
akan menampilkan bagian URL yang cocok dengan pattern [0-9]{4}
dan seterusnya. Sekarang URL kita akan menjadi seperti ini:RewriteRule ^([0-9]{4})/([a-z0-9-]+)/$ /article.php?year=$1&slug=$2
Di sini, capturing group
$1
akan menangkap dan melempar tahun dari URL kepada file article.php. Capturing group $2
akan menangkap dan melempar slug dari judul article. Bila ada group ketiga, group tersebut akan menjadi $3
. Dalam bahasa regex, ini juga disebut sebagai back-references.Options
Dalam
mod_rewrite
kita juga dapat menampilkan sesuatu yagn disebut sebagai option. Option juga disebeut sebagai flags. Ada banyak option yang bisa digunakan. Option digunakan untuk merubah bagaimana cara rules yang kita tulis diprocess oleh system.L
- Rule ini berarti Last. Bila rule yang bersangkutan cocok, system akan berhenti mencoba mencocokan rules lain.R=301
- Akan melakukan HTTP 301 redirect untuk mengirim
browser user ke URL baru. Status 301 berarti file yang ingin dituju oleh
URL sudah hilang secara permanen dan ini merupakan cara baik untuk
meredirect user ke URL baru dan juga mengijnkan search engines untuk
mengupdate indexes mereka.
Options digunakan dengan cara mengenakan tanda kurung kotak disekitar
option yang ingin digunakan. Anda dapat menggunakan lebih dari satu
option dengan memisahkannya dengan koma.
RewriteRule ^([0-9]{4})/([a-z0-9-]+)/$ /article.php?year=$1&slug=$2 [L]
atau
RewriteRule ^([0-9]{4})/([a-z0-9-]+)/$ /article.php?year=$1&slug=$2 [R=301,L]
Yang Tidak Berkerja Untuk Saya
Jujur saja, rewrite rules bukanlah sesuatu yang mudah. Bermain dengan
.htaccess sangatlah menjengkelkan. Terturama dengan minimnya resources
yang dapat mengajarkan cara menerapkan teknologi ini dengan jelas. Code
diatas secara teori benar tetapi saat saya mencobanya, saya menemukan
error dan rukes yang dicontohkan di atas tidak berkerja untuk saya.
Mungkin saat anda mencoba rules di atas langsung berkerja untuk anda dan
itu sangatlah bagus.
Dengan begitu saya mencoba sebuah workaround. Dara pada mencocokan jenis character secara spesifik seperti
[a-z0-9-]
saya menggunakan sebuah pattern dari regex yang berbeda.[^/.]+
- Mencocokan character apapun, angka, huruf, titik maupun symbol. +
yang digunakan akan mencocokan string dengan panjang apapun.
Mungkin bila melihat sisi security hal ini tidak seaman rules yang
dicontohkan di atas. Tetapi bila anda sudah jengkel, ini bisa menjadi
sebuah alternatik. Dengan begitu rules yang saya gunakan adalah:
RewriteRule ^([^/.]+)/([^/.]+)/$ /article.php?year=$1&slug=$2 [L]
Common Pitfalls
Ada beberapa “pitfalls” yang perlu anda perhatikan. Hal-hal ini
penting karena akan mempengaruhi apa rules yang anda tulis berkerja atau
tidak.
Kadang Tidak Berkerja Di Localhost
Terkadang rewrite rules tidak berkerja di localhost. Mungkin ini karena anda tidak memiliki modul
mod_rewrite
atau mungkin modul ini tidak aktif. Satu cara untuk membenarkan ini
adalah dengan menginstall ulang web server yang anda gunakan.
Cara yang saya gunakan adalah dengan mengabaikan localhost
sepenuhnya. Saat dilocalhost saya menggunakan URL biasa dan saya akan
mendesign rewrite rule agar berkerja saat saya upload ke host. Ingat, file .htaccess harus di upload ke host bersamaan dengan file-file lain.
Cara ini sedikit susah dan tidak nyaman tetapi merupakan sebuah solusi
dimana anda tidak perlu mengutak-atik komputer anda. Saya sendiri masih
mencari solusi yang lebih pasti. Artinya saya tidak bisa bernavigasi
secara offline.
Gunakan Absolute Link
Sebuah karakteristik rewrite rules yang menjengkelkan adalah rules
tidak hanya diterapkan ke file yang dituju tetapi juga semua link yang
ada didalam file tersebut.
Berarti, bila anda menggunakan relative link untuk link CSS, JS,
navigasi dan gambar, semua link ini akan dipengaruhi oleh rewrite rule.
Biasanya hasilnya, style dan gambar di halaman anda tidak tampil dan
anda tidak bisa bernavigasi ke halaman lain. Oleh karena itu gunakan
absolute link sebisa mungkin.
Useful Snippets
Menghilangkan File Extentions
Kadang untuk menampilkan URL yang rapih kita ingin menghilangkan extension dari file. URL /about.php ini kita jadikan /about. Caranya adalah dengan menggunakan rule ini:
RewriteRule ^([^/.]+)$ /$1.php [L]
Metode Get Masih Berkerja
Kita sudah menghilangkan file extentions. Tetapi kadang anda masih ingin menggunakan metode
$_GET
secara traditional. Ini masih bisa dilakukan tanpa perlu menulis rules tambahan apapun. Jadi /about?section=mission masih akan melemparkan value mission
ke variable get section
.Mengecualikan Sebuah Directory
Kadang mengecualikan sebuah directory merupakan sesuatu yang
menguntungkan. Contohnya adalah folder dimana file admin berada. Kita
tidak memerlukan URL cantik untuk admin. Oleh karena itu dari pada admin
kita memiliki banyak error yang dikarenakan oleh pitfalls yang tadi
dijelaskan, lebih baik kita kecualikan dari aturan rewrite rules.
Contohnya file yang ingin dikecualikan ada di dalam folder bernama source. Rule kita menjadi seperti ini:
RewriteRule ^source - [L]
Dash setelah nama folder berarti rules tidak akan melakukan apapun ke
folder ini berserta isinya. Bila ingin mengecualikan folder admin,
ganti source ke nama folder dimana file admin berada. Contohnya seperti ini:
RewriteRule ^admin - [L]
Rules Yang Saya Gunakan Untuk Website Ini
Sebagai referensi, ini adalah semua rules yang digunakan untuk website ini.
RewriteEngine On
RewriteRule ^admin - [L]
RewriteRule ^article/([^/.]+)/?$ /post.php?slug=$1 [L]
RewriteRule ^articles/([^/.]+)/?$ /articles.php?page=$1 [L]
RewriteRule ^([^/.]+)/?$ /$1.php [L]
Seperti yang anda lihat, website ini mengecualikan folder admin
dimana system website ini berada. Rules ini diikuti oleh beberapa rules
lain yang akan mempercantik setiap halaman article. Ditemukan juga rules
yang menghilangkan extensi file.
.htAccess, terutama
mod_rewrite
, bukanlah sebuah
teknologi yang gampang dimengerti dan diterapkan. Tetapi terlihat
keuntungan yang didapatkan dari teknologi ini dan saya rasa ini sepadan
dengan kesulitan yang akan dialami saat mempelajarinya
1 Komentar untuk "URL Cantik Dengan htAccess"
The 10 best titanium bong - The Titanium Art
The 10 mens titanium earrings best titanium bong. The Titanium Art. This is titanium apple watch band our favorite piece. It has an excellent titanium knee replacement balance of color titanium cookware and texture. We mens titanium rings call it “Thick Tiger