•  
  • LEARNING GIVES YOU KNOWLEDGE
Kamis, 15 Oktober 2015 - 09:42:21 WIB
URL Rewrite dengan HTACCESS
Diposting oleh : Administrator
Kategori: Pemrograman - Dibaca: 3302 kali

Berikut beberapa contoh penggunaan URL rewrite melalui .htaccess:

Rewrite product.php?id=12 menjadi product-12.html
Redirect sederhana bagi anda yang bermaksud menyembunyikan ekstensi .php  dari address bar browser dan mengubah URL Dinamis ( yang mengandung karakter “?” ) menjadi URL Statis

RewriteEngine on
RewriteRule ^product-([0-9]+).html$ product.php?id=$1

Rewrite product.php?id=12 menjadi product/domainmurah/12.html
Pelaku SEO selalu disarankan untuk menampilkan keyword utama di URLnya. Melalui teknik rewrite URL berikut anda dapat menampilkan nama produk di URL anda.

RewriteEngine on
RewriteRule ^domainmurah/([a-zA-Z0-9_-]+)/([0-9]+).html$ product.php?id=$2

Redirect URL non www menjadi www
Jika anda mengetik jagoanhosting.com di browser,  maka secara otomatis anda akan diarahkan ke www.jagoanhosting.com. Untuk melakukannya, masukkan koding berikut ke dalam file .htaccess anda:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^jagoanhosting.com$
RewriteRule (.*) http://www.jagoanhosting.com/$1 [R=301,L]

Rewrite domain-anda.com/user.php?username=xyz ke domain-anda.com/xyz
Sudah pernah mengecek zorpia.com? Jika anda mengetik http://zorpia.com/user123 di browser maka anda akan diarahkan ke halaman profil user yang bersangkutan. Untuk mendapatkan redirect yang sama;  http://abc.com/xyz ke http://abc.com/user.php?username=xyz maka anda bisa menambahkan koding berikut ke file .htaccess anda:

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

Redirect domain ke subfolder baru di dalam public_html
Posisikan anda baru saja melakukan redevelop terhadap situs anda dan semua pengembangan diletakkan di dalam folder “new” yang terletak di dalam folder root anda. Pengembangan dari website dapat diakses dengan “jagoanhosting.com/new”. Adapun memindahkan file-file tersebut ke folder root membutuhkan proses yang rumit. Menyiasatinya, anda bisa membuat kode berikut di dalam file .htaccess dan menempatkannya di bawah folder root pada website anda. Hasilnya setiap kali www.jagoanhosting.com akan langsung mengarah ke file-file di dalam folder “new”.

RewriteEngine On
RewriteCond %{HTTP_HOST} ^jagoanhosting.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.jagoanhosting.com$
RewriteCond %{REQUEST_URI} !^/new/
RewriteRule (.*) /new/$1

Disadur dari halaman roshanbh.com.np

 

 

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.

Beberapa resources dan contoh dari article ini diambil dari article URL Rewriting for the Fearful oleh Drew McLellan.

 



0 Komentar :



Isi Komentar :
Nama :
Website :
Komentar
 
 (Masukkan 6 kode diatas)