Error Documents
Perintah pertama yang cukup bermanfaat adalah mengalihkan halaman ketika terjadi error. Namun sebelum itu anda harus tahu kode respon yang dihasilkan oleh server untuk suatu request/permintaan. Anda bisa lihat daftar kode respon yang dihasilkan oleh server pada tabel yang nanti saya tunjukkan di bawah.
Anda tidak perlu mendefinisikan untuk seluruh respon code, dan memang tidak seharusnya semua didefinisikan dalam .htaccess. Contohnya perintah ErrorDocument untuk kode 200 justru akan menghasilkan infinite loop. setidaknya anda mungkin perlu menuliskan perintah ErrorDocument untuk kode 404 atau 500.
Jika menghasilkan error 404, biasanya akan menampilkan tampilan polos seperti pada gambar. Namun bila anda menginginkan tampilan yang lebih menarik, anda bisa mengarahkan setiap terjadi error 404 ke halaman lain. Hal ini juga bisa dilakukan bila terjadi error 500 atau kode yang lain.
Syntax kode .htaccess yang bisa digunakan adalah sebagai berikut
ErrorDocument 400 /ibagusm-errors/badrequest.html ErrorDocument 401 /ibagusm-errors/authreq.html ErrorDocument 403 /ibagusm-errors/forbidden.html ErrorDocument 404 /ibagusm-errors/notfound.html ErrorDocument 500 https://ibagusm.web.id/ibagusm-errors/server.html
Dengan membuat halaman error sendiri, tampilan yang dihasilkannya pun akan tetap elegan dan menawan, berbeda ketika halamn yang dihasilkan secara bawaan, polos dan terlihat tidak menarik. Anda juga bisa mengarahkan ErrorDocument ke URL statis seperti pada baris terakhis di atas. Bahkan, anda bisa menuliskan kode HTML pada file .htaccess nya seperti berikut
ErrorDocument 401 "<body bgcolor=#ffffff>Anda harus terdaftar sebagai member untuk mengakses halaman ini</body>"
Yang perlu diingat adalah bahwa seluruh pesan harus diletakkan dalam satu baris saja. Dengan cara demikian anda akan mendapatkan tampilan menarik yang sesuai dengan keinginan anda.
Gambar di atas adalah contoh tampilan error 404 yang telah dikostum.
Memblok Akses Berdasarkan IP
Dengan .htaccess, anda dapat membuat pengaturan untuk blokir akses alamat website anda berdasarkan IP pengunjung. Cara ini adalah salah satu cara untuk blokir akses website anda dari negara tertentu, ataupun meningkatkan keamanan bila terdeteksi percobaan penyerangan dari IP tertentu.
Contoh syntag kode yang bisa digunakan, sebagai berikut:
Order allow, deny Deny from 192.168.11.12 Deny from 123.123. Deny from 1.2.1.2 4.3.4.3 127.0.0.1 Deny from .facebook.com Allow from all
Melihat contoh diatas, ada beberapa cara untuk melakukan pemblokiran. Tapi sebelum itu anda harus mengerti apa maksud yang tertulis dalam kode tersebut, terutama di baris pertama “Order allow, deny”. Baris tersebut mengatur urutan evaluasi hak akses. Kata “Allow” di awal berarti daftar yang dilihat terlebih dahulu adalah alamat yang diperbolehkan. kemudian baru mengecek kode yang tidak diperbolehkan dibawahnya.
Seperti yang tertulis di contoh bahwa ada beberapa cara untuk melakukan pemblokiran. pertama, melalui penulisan IP Address secara lengkap (baris kedua). Kemudian bisa juga menuliskan bagian pertama IP address (baris ketiga), itu artinya 123.123.x.x akan diblokir. Anda juga bisa menuliskan beberapa IP Address dalam satu baris yang dipisahkan dengan spasi (baris keempat). Juga bisa melakukan pencegahan melalui nama domain.
Secara default, server apache menggunakan aturan “Order deny, allow”, yang berarti seluruh permintaan diperbolehkan. Namun yang pertama dilihat dari daftar alamat adalah bagian pemblokiran. Sehingga, bila anda menuliskan lagi kode diatas, Bisa disederhanakan sebagai berikut:
Deny from 192.168.11.12 Deny from 123.123. Deny from 1.2.1.2 4.3.4.3 127.0.0.1 Deny from .facebook.com
Memblokir Akses Berdasarkan Referral
Selain berdasarkan IP, anda juga bisa memblokir akses berdasarkan referral nya. Yang dimaksud disini adalah alamat sebelumnya yang membawa permintaan ke alamat website anda, atau sederhananya darimana alamat permintaan itu berasal. Sebagai contoh, bila anda menuju alamat http://kedaikilat.com dengan cara mengklik link yang ada di https://ibagusm.web.id. Maka alamat terakhir itu yang menjadi referral nya.
Biasanya teknik ini digunakan untuk mencegah situs lain menggunakan resource file di tempat anda (semisal CSS atau gambar). sehingga trafik data server anda membengkak bukan karena permintaan pada server anda, tetapi sebagian tidak berasal dari website anda. Untuk mengaktifkan perintah ini, server apache anda harus terlebih dahulu mengaktifkan modul “mod_rewrite”. Pada XAMPP modul ini sudah aktif secara default. Tetapi pada server sewaan biasanya harus mengaktifkannya terlebih dahulu.
Contoh penulisan perintahnya seperti dibawah ini:
RewriteEngine on # Options +FollowSymlinks RewriteCond %{HTTP_REFERER} kedaikilat\.com [NC] RewriteRule .* - [F]
Perintah di atas akan memblokir segala permintaan yang referralnya berasal dari kedaikilat.com. Perhatikan bahwa penggunaan titik diawali dengan backslash. Setelah itu terdapat kode “[NC]” yang artinya Non-CaseSensitive yang berakibat 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} ibagusm\.com [NC,OR] RewriteCond %{HTTP_REFERER} kedaikilat\.com RewriteRule .* - [F]
Yang perlu diperhatikan bahwa di setiap baris aturan yang berisi alamat terblokir, selain baris terakhir, juga harus diikuti dengan “[NC, OR]”. Selain itu, di baris kedua anda bisa melihat tanda “#” pada awalan komentar. Hilangkan tanda tersebut bila server anda menghasilkan error 500 karena konfigurasi FollowSymLinks tidak diaktifkan.
Permintaan atau request yang diblokir akibat referral ini akan menampilkan pesan erroe 403. Anda bisa memodifikasi file error tersebut menjadi tampilan yang anda inginkan seperti yang telah saya jelaskan sebelumnya.
Memblok bot dan Program Crawler
Apabila anda memiliki webserver dengan bandwidth terbatas, alangkah baiknya anda mencegah bot atau program crawler lainnya (biasanya disebut spinder) mengakses web anda. Perlu diketahui bahwa setiap kunjungan yang diterima oleh webserver, selalu menyertakan informasi user agent. Bila melakukan browsing biasa, biasanya user agent berupa browser yang digunakan oleh pengguna. Berikut contoh kode yang bisa digunakan untuk memblok bot dan program rawler:
<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 perintah diatas, anda harus memiliki daftar useragent yang betul-betul bot atau program crawler. Anda bisa menambahkannya sendiri pada kode di atas. Atau bila bingung bagaimana cara menambahkannya, bisa melihat panduan melalui internet, atau bisa lihat daftarnya sini » http://www.user-agents.org/
Mengubah TimeZone Server
Timezone server sangat menentukan ketika ada panggilan fungsi yang berhubungan dengan waktu, seperti “mktime”. Ketika settingan waktu salah, maka akan mengeluarkan hasil ketidak validan waktu. Anda bisa mengubahnya melalui htaccess melalui kode berikut:
SetEnv TZ Asia/Jakarta
Daftar lengkap Timezone bisa ditemukan di sini http://id1.php.net/manual/en/timezones.asia.php
Menolak Penampilan Daftar Direktori
Secara default, jika di dalam folder atau direktori tidak memiliki file index.html atau index.php, maka browser akan menampilkan daftar file dan direktori yang terdapat di folder tersebut. Bisa jadi ini adalah fitur yang bagus, namun juga bisa menjadi celah kemanan bagi pengelola server.
By default, mesin-mesin webserver mengizinkan untuk menampilkan daftar direktori seperti di atas. Kode untuk mengaktifkan directori list dalam htaccess adalah:
Options +Indexes
Sedangkan untuk menonaktifkannya, adalah:
Options –Indexes
htaccess tidak sekedar berfungsi untuk mengaktifkan dan menon aktifkan list direktori. Tapi bila mana anda mengaktifkannya, maka anda juga bisa mencegaknya untuk ditampilkan. Anda bisa menggunakan kode sebagai berikut:
IndexIgnore *.gif *.zip *.txt blog.html
Kode diatas berarti file yang berekstensi .gif .zip .txt serta file blog.html tidak akan ditampilkan dalam daftar direktori.
Redirect
Ada kalanya anda ingin mengalihkan suatu alamat ke alamat lain. Mungkin ini terjadi ketika alamat anda yang lama berubah, sedangkan itu adalah alamat yang sudah dikenal oleh orang banyak. Maka anda bisa memanfaatkan fitur ini melalui htaccess. Berikut cara termudah untuk melakukan pengalihan:
Redirect /index.html /blog.html
Anda juga bisa melakukan pengalihan keseluruhan folder
Redirect /folderlama /folderbaru
Ada juga cara yang lebih ampuh untuk melakukan pengalihan dengan memanfaatkan kode RedirectMatch
RedirectMatch "\.html$" https://ibagusm.web.id
Pada perintah di atas, semua permintaan yang berakhiran .html akan diteruskan langsung ke home https://ibagusm.web.id
Mengganti File Default Pada Directory
Setiap server memiliki aturan sendiri dalam menampilkan halaman default saat kita mengakses suatu direktori. biasanya, apache akan mengakses file “index.html” kemudian “index.php” pada suatu directori. Mungkin akan berbeda pada mesin server yang lainnya.
Bila anda berkeinginan untuk mengubah pengaturan ini pada htaccess, bisa menggunakan kode berikut:
DirectoryIndex home-page.html
Dengan demikian, ketika pengguna mengakses suatu folder atau direktori tanpa diikuti nama file, maka akan menampilkan atau mengesekusi file “home-page.html”. Juga, anda bisa mengatur tidak hanya satu file saja, tapi bebrapa file. Seperti pada kode berikut:
DirectoryIndex home-page.html index.html index.php
Dengan cara diatas, mesin akan mencari file diatas. Dengan ketentuan, akan menampilkan “home-page.html”. Jika tidak ditemukan, maka akan menampilkan “index.html”, dan jika tidak ditemukan, akan menampilkan “index’php”. Artinya akan memperioritaskan yang petama kali ditulis (paling kiri).
Mengatur www atau non-www
Secara default, anda akan diarahkan kepada folder yang sama ketika mengakses suatu alamat website, menggunakan www ataupun tidak. Jadi ketika anda mengakses alamat ibagusm.web.id ataupun www.ibagusm.web.id, maka akan menampilkan halaman yang sama. Yang menjadi masalah adalah ketika terdapat 2 konten yang sama tetapi memiliki alamat yang berbeda, maka akana mengesankan bahwa website anda tidaklah konsisten.
Anda bisa mengatur apakah alamat website anda menggunakan www ataupun tidak. Sebagai contoh, ketikan anda mengakses www.ibagusm.web.id, maka akan otomatis mengarah ke https://ibagusm.web.id. Untuk kode pengaturan melalui htaccess, bisa menggunakan:
RewriteEngine On RewriteCond %{HTTP_HOST} !^ibagusm.web.id$ [NC] RewriteRule ^(.*)$ https://ibagusm.web.id/$1 [L,R=301]
Dan ketika anda ingin alamat anda selalu di dahului www, maka bisa menggunakan:
RewriteEngine On RewriteCond %{HTTP_HOST} ^ibagusm.web.id [NC] RewriteRule ^(.*)$ http://www.ibagusm.web.id/$1 [L,R=301]
Mau menggunakan awalan www ataupun tidak, semua tergantung pilihan anda.
Kompresi File
Salah satu fitur andalan yang bisa dilakukan oleh htacces lainnya adalah mampu mengkonfersi file yang dikirim dari server ke pengguna. Kompresi yang digunakan adalah Zlib. Berikut contoh kodenya:
# 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 diatas memerintahkan untuk mengkompresi file teks, html, javascript, xml, css. Anda bisa menambahkan tipe file yang akan dikompesi sesuai kebutuhan anda.
Cache File
Mekanisme caching dapat mempercepat akses website karena file yang dicache tidak akan diproses ulang. Cara ini cukup efektif, dimana pengguna akan mengakses file yang ter-cache tanpa harus mendownload ulang file aslinya. Cache bisa terletak di server maupun di komputer pengguna. Berikut contoh kode untuk caching beberapa file:
<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf)$"> Header set Cache-Control "max-age=2592000" </FilesMatch>
Anda bisa mengubah seberama lama cache akan disimpan dengan mengatur parameter “max-age”. Pastikan juga anda menyimpan file pada cache yang jarang sekali berubah. Karena terkadan ada file dinamis atau yang berubah-ubah. Seperti file script PHP, mungkin sebaiknya tidak dicache.
Nah, untuk menghindari cache untuk file yang dinamis ini, maka berikut contoh kode supaya file tidak ikut ter-cache:
<FilesMatch ".(pl|php|cgi|spl|scgi|fcgi)$"> Header unset Cache-Control </FilesMatch>
Maka dengan demikian file diatas tidak akan ikut ter-cache oleh server maupun pengguna (browser) setiap kali melakukan permintaan. Jadi browser akan selalu mendownload file terbaru.
Mengatur MIME Types
MIME Types mengatur tentang jenis apa file tersebut. atau sederhananya adalah sebuah ekstensi file sebagai acuan jenis file tersebut. contoh, file “.html” berarti file tersebut adalah sebuah dokumen HTML, file “.zip” berarti file tersebut adalah arsip ZIP, dan seterusnya. Terkadang web hosting tidak melakukan MIME Types secara benar. Untuk mengubahnya, anda bisa menambahkan kode berikut pada file htaccess:
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 beberapa jenis MIME yang bisa anda lihat pada kode di atas. Anda juga bisa menambahkan trik yang diterapkan, misalnya trik untuk masalah file MP3 atau SWF yang tidak dijalankan, maka anda bisa mengatur MIME Types sepeeti ini:
AddType application/x-shockwave-flash .swf
Trik lain, beberapa browser mungkin akan menampilkan jenis file tertentu di browser tersebut, seperti file PDF atau DOC. Untuk “memaksa” agar browser langsung mendownload, anda bisa mengatur MIME Types dari ekstensi suatu file menjadi “aplication/octet-stream” seperti ini:
AddType application/octet-stream .pdf .doc
Dan anda juga bisa memanfaatkan untuk keperluan lain yang menjadi kebutuhan anda.
Itulah beberapa contoh trik yang dapat dilakukan memanfaatkan htaccess. Masih banyak trik yang bisa anda manfaatkan. Namun yang sangat perlu diingat sekali lagi adalah, bahwa perintah yang terdapat di direktori root, akan berdampak pada sub folder dibawahnya. Jadi berhati-hatilah menggunakan senjata ini, yang mungkin bisa membantu anda, atau malah bisa membuat stress anda. Selamat mencoba.
[Tambahan] Tabel Response Code
Di setiap permintaan, server apache akan memberikan response code di http header agar browser dapat memilih mana yang berhasil dan mana yang tidak berhasil atau error. Berikut daftar response code yang biasa digunakan:
Successfull Client Request
Code |
Keterangan |
200 | OK |
201 | Created |
202 | Accepted |
203 | Non-Authorative Information |
204 | No Content |
205 | Reset Content |
206 | Partial Content |
Client Request Redirected
Code | Keterangan |
300 | Multiple Choices |
301 | Moved Permanently |
302 | Moved Temporarily |
303 | See Other |
304 | Not Modified |
305 | Use Proxy |
Client Request Errors
Code | Keterangan |
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 URL Too Long |
415 | Unsupported Media Type |
Server Errors
Code | Keterangan |
500 | Internal Server Error |
501 | Not Implemented |
502 | Bad Gateway |
503 | Service Unavailable |
504 | Gateway Timeout |
505 | HTTP Version Not Supported |