Bagi developer website terutama yang menggunakan bahasa PHP atau server Apache, ilmu tentang .htaccess merupakan salah satu hal yang penting. Hanya dengan menguasai .htaccess ini saja, Anda bisa melakukan berbagai kustomisasi alur website sesuka Anda. Tentu saja tidak terlepas dari kemampuan Anda memanfaatkan kode PHP yang Anda gunakan.
Tentang .htaccess
File .htaccess (selanjutnya akan disebut htaccess saja) sendiri sebenarnya hanyalah sebuah file teks dalam format ASCII. Tujuan awalnya, dalam server Apache, file ini akan dibaca pertama kali sebelum request diproses ke file yang dikehendaki. Htaccess juga dapat digunakan untuk meng-override konfigurasi server untuk mengaktifkan ataupun menonaktifkan fitur-fitur dan berbagai fungsi lainnya.
Bahkan, htaccess akan dapat mengarahkan file mana yang akan diakses meskipun request-nya berbeda. Contoh sederhananya, htaccess dapat mengarahkan request ke file 404.html bila alamat yang di-request oleh user tidak tersedia. Htaccess juga dapat digunakan untuk memperkuat keamanan server web Anda.
Sebagai contoh, Anda dapat mengatur HTTP Password melalui htaccess ini, sehingga pengguna yang mengakses web Anda harus memasukkan username dan password. Anda juga dapat mengatur apakah suatu alamat website Anda hanya dapat diakses dari alamat IP (Internet Protocol) tertentu. Misalnya, untuk halaman admin hanya dapat diakses oleh komputer dengan IP lokal kantor Anda.
Lokasi htaccess
Htaccess dapat dengan mudah diletakkan dalam folder web Anda, dan bersifat rekursif. Artinya, bila Anda meletakkan htaccess di folder paling atas (root) web Anda, maka perintah yang ada di file tersebut akan berdampak ke semua sub-folder di dalamnya. Sedangkan bila Anda meletakkan htaccess di dalam sub-folder, maka perintah di dalamnya akan meng-override perintah yang ada di folder induknya.
Dengan demikian, sebagai contoh bila Anda ingin menonaktifkan mode akses list folder secara global, Anda bisa meletakkan file htaccess di root web. Kemudian bila Anda ingin memperbolehkan salah satu folder saja bisa memungkinkan diakses untuk mendapatkan daftar isinya, maka cukup meletakkan htaccess di dalamnya dengan perintah yang berbeda.
Penempatan htaccess mempengaruhi perintah dalam file mana yang akan digunakan server
Penempatan htaccess mempengaruhi perintah dalam file mana yang akan digunakan server
Semisal alamat website Anda adalah mimicreative.net, kemudian Anda meletakkan htaccess di root folder, maka tentu saja akan berdampak ke folder di dalamnya seperti mimicreative.net/about, mimicreative.net/about/contact, dan sebagainya. Sedangkan bila Anda meletakkan htaccess di dalam folder mimicreative.net/about/contact (yang paling dalam), maka bila pengguna mengaksesnya, server akan menggunakan perintah htaccess di folder itu, bukan yang ada di root web.
Perintah htaccess
Htaccess memiliki banyak perintah yang bisa digunakan. Dalam artikel ini akan dibahas sebagian perintah yang umum digunakan dalam konfigurasi website pada Apache Server. Untuk mencobanya, yang perlu Anda lakukan adalah menginstall Apache Server di komputer Anda. Untuk lebih mudahnya, Anda bisa menggunakan XAMPP yang bisa didownload di http://www.apachefriends.org/en/xampp.html sesuai sistem operasi yang Anda gunakan.
XAMPP dapat diinstal baik di sistem operasi Windows maupun Linux. Contoh dalam artikel ini menggunakan XAMPP pada sistem operasi Windows 7. Namun bila Anda menggunakan Linux, ataupun bila mengupload file web dengan htaccess ke web server, sebaiknya atur permission file menjadi 644.
Perlu Anda ketahui, htaccess merupakan file yang diawali dengan titik. Pada Linux, file dengan nama yang diawali titik dianggap sebagai hidden file, yang artinya secara default tidak akan ditampilkan. Sedangkan pada Windows, htaccess akan dianggap sebagai file biasa yang tidak disembunyikan. Karena itulah sebenarnya Apache server sebaiknya dijalankan pada Linux.
Setiap perintah dalam htaccess dipisahkan dalam baris yang berbeda. Karena itu berhati-hatilah bila Anda menggunakan text editor yang menyediakan fitur word-wrap, sebab memungkinkan terjadi kesalahan dalam pergantian baris kode. Untuk memberikan komentar, Anda harus mengawali setiap baris komentar dengan karakter sharp “#”.
Error Documents
Perintah pertama yang cukup bermanfaat adalah mengalihkan request bila terjadi error. Namun sebelum itu, Anda harus mengerti kode respon yang dihasilkan oleh server pada proses request. Anda bisa melihat daftar kode respon yang disediakan Apache Server pada tabel Response Code yang tersedia.
Anda tidak perlu mendefinisikan untuk seluruh response code, dan memang tidak seharusnya semua didefinisikan dalam htaccess. Sebagai contoh, perintah ErrorDocument untuk kode 200 justru akan menghasilkan infinite loop. Setidaknya, Anda mungkin perlu menuliskan perintah ErrorDocument untuk kode 404 dan 500.
Tampilan halaman 404 biasa
Tampilan halaman 404 biasa
Biasanya, tampilan error 404 hanya akan menampilkan pesan teks dengan latar belakang putih polos seperti pada gambar. Namun bila Anda ingin mengubahnya menjadi lebih menarik, Anda bisa mengarahkan response setiap terjadi error 404 ke suatu halaman html lain. Demikian juga bila terjadi error 500 atau kode lainnya.
Syntax kode htaccess yang bisa digunakan adalah sebagai berikut.
ErrorDocument 400 /mimi-errors/badrequest.html
ErrorDocument 401 /mimi-errors/authreq.html
ErrorDocument 403 /mimi-errors/forbidden.html
ErrorDocument 404 /mimi-errors/notfound.html
ErrorDocument 500 http://mimicreative.net/mimi-errors/server.html
Dengan membuat halaman error sendiri, tampilan web Anda ketika error pun masih tetap elegan, tidak polos seperti pada umumnya. Anda juga bisa mengarahkan ErrorDocument ke URL statis seperti pada baris terakhir di atas. Bahkan, Anda juga bisa menulis kode HTML pada file htaccess-nya seperti berikut.
ErrorDocument 401 ”
Anda harus terdaftar sebagai member untuk mengakses halaman ini
”
Perhatikan bahwa pesan diawali tanda petik (“), namun tidak perlu diakhiri dengan tanda petik pula. Selain itu, seluruh pesan harus tetap diletakkan dalam satu baris saja. Dengan cara demikian, Anda bisa membuat halaman error lebih menarik seperti gambar.
Salah satu contoh tampilan custom error
Salah satu contoh tampilan custom error
Memblok akses berdasarkan IP
Dengan htaccess, Anda dapat membuat pengaturan untuk blokir akses alamat web Anda berdasarkan IP pengunjung. Cara inilah yang digunakan website untuk mencegah pengunjung dari negara tertentu, ataupun meningkatkan keamanan bila terdeteksi banyak percobaan pembobolan dari suatu alamat IP tertentu.
Contoh syntax kode htaccess yang bisa digunakan adalah sebagai berikut.
Order allow, deny
Deny from 192.168.0.13
Deny from 222.123.
Deny from 1.2.1.2 4.3.4.3 127.0.0.1
Deny from .facebook.com
Allow from all
Pada contoh di atas, ada beberapa cara yang bisa Anda gunakan. Sebelum itu, Anda harus mengerti apa maksud dari baris pertama “Order allow, deny”. Baris tersebut mengatur urutan evaluasi hak akses. Kata “allow” di awal menyatakan bahwa daftar yang dilihat terlebih dahulu adalah alamat yang diperbolehkan, kemudian baru mengecek daftar alamat yang tidak diperbolehkan.
Ada beberapa cara untuk memblokir IP. Cara pertama ada pada baris kedua, yaitu menuliskan alamat IP secara lengkap. Cara kedua adalah dengan menuliskan bagian depan saja. Seperti pada baris ketiga, maka alamat “222.123.1.1” maupun alamat “222.123.14.23” akan diblokir. Anda juga bisa menuliskan beberapa alamat IP dalam satu baris, yang dipisahkan spasi ataupun tab. Selain itu, untuk memudahkan pula Anda bisa mencegah berdasarkan nama domain.
Secara default, server Apache menggunakan aturan “Order deny, allow”, yang berarti secara default seluruh request diperbolehkan, namun yang pertama dilihat dari daftar alamat adalah bagian pemblokiran. Sehingga, bila Anda menuliskan lagi kode di atas, bisa disederhanakan sebagai berikut.
Deny from 192.168.0.13
Deny from 222.123.
Deny from 1.2.1.2 4.3.4.3 127.0.0.1
Deny from .facebook.com
Memblok akses berdasarkan referral
Selain berdasarkan IP, Anda juga bisa memblok akses berdasarkan referral-nya. Yang dimaksud dengan referral adalah alamat sebelumnya yang membawa request ke alamat Anda, atau sederhananya dari alamat mana request itu berasal. Sebagai contoh, bila kita menuju alamat http://folderbaimm.com dengan cara mengklik link yang ada di http://folderbaimm.com, maka alamat kedua itulah yang menjadi referralnya.
Biasanya teknik ini digunakan untuk mencegah situs lain menggunakan resource file di tempat Anda (semisal CSS atau gambar), sehingga traffic data server Anda membengkak meski bukan murni dari website Anda. Untuk mengaktifkan perintah ini, server Apache Anda harus mengaktifkan terlebih dahulu modul “mod_rewrite”. Pada XAMPP, secara default modul ini sudah aktif. Namun pada web server yang disewakan secara umum, Anda perlu mencari tahu terlebih dahulu.
Contoh penulisan perintah blokir berdasarkan referral adalah sebagai berikut.
RewriteEngine on
# Options +FollowSymlinks
RewriteCond %{HTTP_REFERER} mimicreative.net [NC]
RewriteRule .* – [F]
Perintah di atas akan memblokir segala request yang referralnya adalah mimicreative.net. Perhatikan bahwa penggunaan titik diawali dengan backslash. Setelah itu, terdapat tulisan “[NC]” yang artinya Non-CaseSensitive yang menyebabkan server tidak menghiraukan perbedaan huruf kapital atau tidak.
Untuk memblokir langsung dari beberapa alamat, Anda bisa menggunakan kode berikut.
RewriteEngine on
# Options +FollowSymlinks
RewriteCond %{HTTP_REFERER} mimicreative.net [NC,OR]
RewriteCond %{HTTP_REFERER} haqqi.net
RewriteRule .* – [F]
Yang perlu Anda perhatikan bahwa di setiap baris aturan yang berisi alamat terblokir, selain baris terakhir harus diikuti dengan “[NC, OR]”. Selain itu, pada baris kedua Anda bisa melihat ada baris yang menggunakan komentar “#”. Hilangkan tanda komentar tersebut bila server Anda menghasilkan error 500 karena konfigurasi FollowSymLinks tidak diaktifkan.
Request yang diblok berdasarkan referral ini akan menampilkan pesan error 403. Anda bisa mengkustomisasi tampilan error tersebut bila telah mendefinisikan file yang mengatur ErrorDocument sebelumnya.
Memblok bot dan program crawler
Apabila Anda memiliki web server dengan bandwidth yang terbatas, alangkah baiknya bila Anda mencegah bot atau program crawler lainnya (biasanya disebut spider) mengakses web Anda. Perlu diketahui bahwa setiap request yang diterima oleh web server, selalu menyertakan informasi User Agent. Bila melakukan browsing biasa, maka User Agent bisa berarti browser yang digunakan oleh pengguna. Contoh kode yang bisa Anda gunakan adalah sebagai berikut.
SetEnvIfNoCase ^User-Agent$ .*(craftbot|download|extract|stripper|sucker|ninja|clshttp|webspider|leacher|collector|grabber|webpictures) HTTP_SAFE_BADBOT
SetEnvIfNoCase ^User-Agent$ .*(libwww-perl|aesop_com_spiderman) HTTP_SAFE_BADBOT
Deny from env=HTTP_SAFE_BADBOT
Untuk mengoptimalkan kode di atas, Anda harus memiliki daftar jenis User Agent yang memang benar-benar bot atau crawler. Silahkan Anda tambahkan sendiri User Agent di kode tersebut dengan mencari referensi di Internet.
Mengubah timezone server
Setting timezone server sangat menentukan ketika memanggil fungsi yang berhubungan dengan waktu, seperti “mktime”. Bila setting yang ada di server tidak benar, akan muncul berbagai masalah kevalidan waktu. Untuk itu, Anda bisa mengaturnya pada htaccess dengan kode sebagai berikut.
SetEnv TZ Australia/Melbourne
Daftar timezone yang bisa digunakan bisa Anda temukan pada alamat di bagian akhir artikel ini.
Mencegah penampilan daftar direktori
Biasanya, bila dalam sebuah folder web Anda tidak memiliki file index.html atau index.php, maka secara default browser akan menampilkan daftar file dalam folder itu saat pengguna mengaksesnya. Ini bisa jadi sebuah fitur yang bagus, namun terkadang bisa menyerempet ke masalah keamanan data.
Contoh tampilan directory listing
Contoh tampilan directory listing
Secara default, server XAMPP memperbolehkan akses daftar folder. Kode untuk mengaktifkannya dalam htaccess adalah seperti berikut.
Options +Indexes
Sedangkan untuk menonaktifkannya, Anda bisa menggunakan kode berikut.
Options –Indexes
Htaccess tidak hanya sekedar mengaktifkan atau menonaktifkan saja. Bila Anda mengaktifkan fitur directory listing, Anda juga bisa mencegah file tertentu untuk tidak ditampilkan. Contohnya adalah sebagai berikut.
IndexIgnore *.gif *.zip *.txt blog.html
Dengan demikian file berekstensi gif, zip, dan txt, serta file blog.html tidak akan ditampilkan pada directory listing.
Redirect
Ada kalanya Anda ingin mengalihkan sebuah URL di website Anda ke alamat lainnya. Bisa jadi alasannya adalah karena alamat lama terdapat di suatu folder tertentu, kemudian ingin memindahkannya. Padahal sudah banyak pengguna yang menghafalkan alamat tersebut. Dengan menggunakan htaccess, masalah tersebut dapat diatasi.
Cara termudah untuk melakukan redirect adalah sebagai berikut.
Redirect /index.html /blog.html
Anda juga bisa melakukan redirect untuk keseluruhan folder.
Redirect /folderlama /folderbaru
Cara yang lebih ampuh lagi melakukan redirect adalah menggunakan perintah RedirectMatch.
RedirectMatch “.html$” http://mimicreative.net/home
Pada perintah di atas, semua request terhadap alamat dengan akhiran “.html” akan diarahkan ke alamat “home”.
Mengganti file default pada direktori
Setiap server memiliki aturan sendiri dalam menampilkan halaman default apabila kita mengakses suatu direktori. Biasanya, yang akan diakses oleh server Apache bila kita mengakses suatu direktori, pertama kali adalah file “index.html”, kemudian “index.php”. Berbeda lagi untuk server lainnya.
Anda bisa mengubah file default dengan menggunakan htaccess. Caranya adalah sebagai berikut.
DirectoryIndex home-page.html
Dengan demikian, apabila pengguna mengakses folder tanpa diikuti nama file, secara otomatis akan diarahkan untuk mengakses file “home-page.html”. Anda juga bisa mengatur tidak hanya satu file saja, tapi urutan file yang akan dicari seperti berikut.
DirectoryIndex home-page.html index.html index.php
Dengan cara di atas, server akan mencari file secara berurutan dari “home-page.html”, yang bila tidak ketemu akan dilanjutkan dengan pencarian “index.html”, yang kemudian akan mencari “index.php”. Bila terdapat 2 nama file seperti “index.html” dan “index.php”, maka akan dipilih yang paling kiri (sebagai prioritas).
Mengatur www atau non-www
Secara default, web server mengarahkan request baik www maupun root domain ke folder yang sama. Jadi, Anda bisa mengakses alamat web Anda baik folderbaimm.com ataupun http://www.folderbaimm.com. Yang menjadi masalah adalah bila terdapat 2 konten yang sama dengan alamat yang berbeda, akan muncul pula pada search engine. Selain itu, akan membuat alamat website Anda kurang konsisten.
Anda bisa mengatur apakah website Anda diharuskan memakai www ataupun tidak. Sebagai contoh, website penulis, bila diakses menggunakan http://www.folderbaimm.com akan otomatis mengarah ke root domain http://folderbaimm.com. Untuk melakukannya, dalam htaccess dituliskan kode seperti berikut.
RewriteEngine On
RewriteCond %{HTTP_HOST} !^haqqi.net$ [NC]
RewriteRule ^(.*)$ http://haqqi.net/$1 [L,R=301]
Sedangkan bila Anda menginginkan website Anda selalu menggunakan www apabila mengakses root domain, maka kode htaccess-nya adalah sebagai berikut.
RewriteEngine On
RewriteCond %{HTTP_HOST} ^haqqi.net [NC]
RewriteRule ^(.*)$ http://www.haqqi.net/$1 [L,R=301]
Langkah ini cukup penting, mengingat masih banyak orang awam yang mengakes root domain dengan awalan sub-domain www. Sedangkan untuk pilihan apakah alamat yang Anda gunakan adalah www ataupun non-www, semua ada di tangan Anda.
Kompresi file
Salah satu perintah yang cukup bermanfaat lainnya adalah kompresi file yang dikirim dari server ke pengguna. Htaccess mampu melakukannya, dengan beberapa baris saja. Kompresi yang digunakan adalah zlib, berikut contoh kode-nya.
# compress text, html, javascript, css, xml:
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
Kode di atas akan mengkompres file teks, html, javascript, css, dan xml. Anda bisa menambahkan jenis file lainnya selama Anda mengerti jenis file atau mime-type file yang akan Anda kompres.
Cache File
Mekanisme caching dapat mempercepat akses website karena file yang di-cache tidak perlu diproses lagi. Cara ini cukup efektif terutama bila website Anda memiliki pengguna tetap. Pengguna akan mengakses file ter-cache alih-alih mendownload file yang sama lagi. Cache bisa terletak di server maupun komputer pengguna. Berikut ini contoh kode untuk men-cache beberapa tipe file.
“.(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf)$”>
Header set Cache-Control “max-age=2592000”
Anda bisa mengubah seberapa lama cache akan disimpan dengan mengatur parameter “max-age”. Pastikan Anda men-cache hanya jenis file yang sangat jarang sekali berubah, karena terkadang ada file yang bersifat dinamis. File script seperti PHP sebaiknya tidak di-cache, terutama bila Anda cukup sering mengubah-ubah file PHP tersebut.
Untuk menghindari cache pada script dan file-file dinamis lainnya, Anda bisa menggunakan kode berikut ini.
“.(pl|php|cgi|spl|scgi|fcgi)$”>
Header unset Cache-Control
Dengan demikian, maka file tersebut tidak akan di-cache oleh server maupun browser pengguna. Setiap kali pengguna mengakses file tersebut, browser akan selalu mendownload yang terbaru.
Mengatur MIME Types
MIME Type mengatur tentang jenis apakah sebuah file tersebut, atau secara sederhananya adalah sebuah ekstensi file sebagai acuan jenis file tersebut. Sebagai contoh, file “.html” berarti file tersebut adalah sebuah dokumen HTML, file “.zip” berarti file tersebut adalah arsip ZIP, dan sebagainya. Terkadang web hosting yang ada, tidak melakukan pengaturan MIME Types secara benar. Untuk mengubahnya, Anda bisa menambahkannya melalui htaccess seperti berikut.
AddType application/rtf .rtf
AddType image/gif .gif .GIF
AddType image/ief .ief
AddType image/jpeg .jpeg .jpg .jpe .JPG
AddType image/tiff .tiff .tif
AddType application/zip .zip
AddType application/x-mif .mif
Ada berbagai jenis MIME yang bisa Anda lihat pada alamat di akhir artikel ini. Berbagai trik juga bisa diterapkan, seperti trik untuk masalah file MP3 atau SWF yang tidak dijalankan, Anda bisa mengatur MIME Type seperti berikut.
AddType application/x-shockwave-flash .swf
Trik lain, beberapa browser mungkin akan menampilkan jenis file tertentu di browser tersebut, seperti file PDF ataupun Word. Untuk “memaksa” browser agar langsung melakukan download, Anda bisa mengatur MIME Types dari extensi suatu file menjadi “application/octet-stream”, seperti berikut.
AddType application/octet-stream .pdf .doc
Bisa dilihat pula pada contoh di atas, Anda bisa mendeklarasikan beberapa ekstensi pada satu baris.
Penutup
Masih banyak trik yang dapat dilakukan dengan htaccess ini. Manfaat yang bisa didapat pun berbagai ragam. Namun perlu Anda ingat sekali lagi, bahwa perintah dalam root folder htaccess akan berdampak pula pada folder di dalamnya. Jadi, berhati-hatilah terhadap pedang bermata dua yang bisa membingungkan Anda ini. Selamat mencoba.
Tabel Response Code
Setiap proses request, server Apache selalu memberikan response code di http header, agar browser dapat memilah mana yang sukses dan mana yang error. Berikut ini adalah daftar response code yang umum digunakan.
Successful Client Requests
200 OK
201 Created
202 Accepted
203 Non-Authorative Information
204 No Content
205 Reset Content
206 Partial Content
Client Request Redirected
300 Multiple Choices
301 Moved Permanently
302 Moved Temporarily
303 See Other
304 Not Modified
305 Use Proxy
Client Request Errors
400 Bad Request
401 Authorization Required
402 Payment Required (not used yet)
403 Forbidden
404 Not Found
405 Method Not Allowed
406 Not Acceptable (encoding)
407 Proxy Authentication Required
408 Request Timed Out
409 Conflicting Request
410 Gone
411 Content Length Required
412 Precondition Failed
413 Request Entity Too Long
414 Request URI Too Long
415 Unsupported Media Type
Server Errors
500 Internal Server Error
501 Not Implemented
502 Bad Gateway
503 Service Unavailable
504 Gateway Timeout
505 HTTP Version Not Supported