Mengenal .htaccess (Bagian 2)

Mengenal .htaccess (Bagian 2)

Apabila Anda memiliki web server dengan bandwidth yang terbatas, alangkah baiknya bila Anda mencegah bot atau program crawler lainnya (biasanya disebut spider) mengakses web…

Artikel ini adalah lanjutan dari bagian 1

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.

<IfModule mod_rewrite.c>
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
</ifModule>

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 mimicreative.net ataupun www.mimicreative.net. 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.haqqi.net akan otomatis mengarah ke root domain http://haqqi.net. 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.

<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch>

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.

<FilesMatch ".(pl|php|cgi|spl|scgi|fcgi)$">
Header unset Cache-Control
</FilesMatch>

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

Artikel milik penulis ini pernah dipublikasikan oleh PC Media di edisi 2012/01 lalu.
Tag: , , , ,

1 Comment

Leave Comment
  1. siprof says:

    Terima kasih artikelnya lengkap dan berguna. Mungkin bisa ditambahkan mengenai cara Hotlink Protection? :)

Write Comment

Your email will not be published. The marked label is required.