Menggunakan .htaccess di PHP
Sekarang saya akan mencoba berbagi mengenai penggunaan .htaccess di PHP. .htaccess adalah salah satu teknik manipulasi URL agar URL website menjadi lebih friendly. Disamping itu .htaccess bisa juga dimanfaatkan untuk mengubah ulang setting server web karena htaccess sendiri adalah fitur yang disediakan untuk melakukan kustomisasi (costomize) terhadap setting HTTPD server.
Untuk bahasan kali ini saya akan mencoba menjelaskan penggunaan htaccess dalam manipulasi URL website dan beberapa perubahan seting website (Apache server)
.htaccess untuk Mempercantik URL Website
Hal paling penting dari keberadaan .htaccess dan sangat membantu adalah kemampuannya untuk melakukan manipulasi URL sebuah website. Ada beberapa keuntungan bila kita melakukan manipulasi terhadap URL, beberapa diantaranya:
Friendly URL
Dengan URL Friendly URL website kita jadi lebih bersahabat dan dapat dibaca alurnya sehingga lebih memudahkan bagi user (dalam mengelola) maupun bagi developer (dalam membangun). Selain itu jika kita memberikan sebuah URL kepada orang lain atau siapapun itu website jadi lebih mudah diingat, dan dampak lainnya bisa saja pengunjung menjadi penasaran untuk berselancar lebih dalam di website kita. Butuh bukti? Silahkan bandingkan, mana yang lebih mudah untuk diingat dari 2 contoh URL berikut!
http://www.domain.com/artikel/kesehatan/penderita-obesitas-bisa-ditangani-dengan-akupuntur.html
http://www.domain.com/index.php?menu=artikel&kategori=kesehatan&item=penderita-obesitas-bisa-ditangani-dengan-akupuntur.html
Saya yakin sahabat AJN pasti akan memilih yang pertama dibanding yang kedua. Alasannya sudah tau lah, jadi lebih mudah diingat dan 'manusiawi', hehehe ![]()
Professional
Satu hal ini tidak bisa dipungkiri lagi bahwasanya jika kita telah pandai menggunakan fasilitas .htaccess maka tentunya sebuah label professional layak kita peroleh. Bila kita manfaatkan lebih jauh kita bisa melakukan banyak sekali manipulasi termasuk manipulasi lokasi file agar tidak diketahui oleh publik. Dan ini tentu membuat sang admin web menjadi lebih tenang akan data yang dimilikinya di website.
Lebih Aman
Saya katakan aman hanya saja masih ada beberapa syarat lagi yang menurut saya sih tidak susah tapi saya masih sering menemui peluang celah keamananan ini untuk bisa dicoba menembus sistem keamanan web. Seperti apa sih maksud keamanan di sini? Yang saya maksud disini adalah preventing atau pencegahan terhadap SQL Injection. Tau kan apa itu SQL Injection? Ya menipulasi query yang tujuannya bisa beraneka ragam dan dampaknya cukup membahayakan konten website. Berabe dong kita udah bikin website yang bagus tapi ternyata bisa dibobol, atau yang kalo banyak orang bilang 'hack'. Ya sebenarnya bukan hack kalo yang beginian mah, tapi bisa disebut pishing
Search Engine Akan Lebih Giat Menelusuri
Hal yang tak kalah lebih penting dari manipulasi URL dengan htaccess adalah bertujuan untuk SEO Friendly. Dengan URL yang cantik mesin search engine seperti Google, Yahoo, Bing dan yang lainnya akan lebih senang mengunjungi dan mengindex website kita dibandingkan dengan website yang mengunakan query string. Hal ini dikarenakan search engine labih suka mejamah website yang memiliki hierarki dibanding dengan website yang bisa dikatakan 'primitif' dalam mengelola URLnya. Dengan adanya organizing hierarki, misalnya pembuatan kategori maka search engine akan menelusuri terus link-link terkait di kategori tersebut. Jadi ada harapan website kita cepat diindex oleh mesin search engine dan itu adalah keuntungan yang besar.
Dari beberapa penjelasan di atas akan saya coba bikin sebuah contoh penggunaan htaccess. Supaya kita tidak kebingungan kita asumsikan kita sedang membuat sebuah file untuk menampilkan artikel. Artikel yang kita buat memiliki kategori. Oiya bekal dasar yang harus dipahami dalam manipulasi URL dengan .htaccess adallah kita harus paham dulu dengan istilah (yang kalau saya lebih senang menyebutnya dengan) slug. Jadi di database kita membutuhkan minimal 2 atau 3 tabel: tbl_artikel, tbl_kategori dan tbl_user. Anggap saja kita sudah memiliki data di ketiga tabel tersebut adalah seperti dibawah ini
tbl_artikel
| idartikel | idkategori | author | tgl | slug_artikel | judul | isi_artikel |
|---|---|---|---|---|---|---|
| 1 | 1 | 1 | 2014-03-28 14:22:01 | cara-mudah-hidup-sehat | Cara Mudah Hidup Sehat | blablablabla isi artikel untuk artikel pertama |
| 2 | 1 | 1 | 2014-03-29 20:16:21 | tolak-penyakit-dengan-olahraga | Tolak Penyakit dengan Rajin Olahraga | blablablabla isi artikel untuk artikel kedua |
| 1 | 2 | 1 | 2014-03-29 07:45:16 | cloud-mulai-ramai | Teknologi Cloud Mulai Ramai | blablablabla isi artikel untuk artikel ketiga |
| 1 | 3 | 1 | 2014-03-30 10:22:11 | soto-tanpa-ayam | Soto Tanpa Ayam | blablablabla isi artikel untuk artikel keempat |
tbl_kategori
| idkategori | slug_artikel | nama_kategori |
|---|---|---|
| 1 | kesehatan | Kesehatan |
| 2 | teknologi | Teknologi |
| 3 | humor | Humor |
tbl_user
| iduser | nama | |
|---|---|---|
| 1 | Ari Julianto | arijulianto@programmer.net |
Dengan bekal tabel-tabel dan data seperti di atas kita membutuhkan:
1. Halaman daftar 10 artikel terbaru (halaman utama menu artikel)
2. Halaman daftar artikel dari kategori tertentu (halaman kategori yang dipilih)
3. Halaman detail artikel (berdasarkan slug artikel)
Yang pertama kita buat adalah mulai dari halaman detail artikel, dilanjutlan dengan daftar kategori kemudian menu utama (10 artikel terbaru).
Sebagai bahan ilustrasi, kita akan membuat URLnya menjadi seperti di bawah ini!
Detail artikel: www.domain.com/artikel/kategori/slug-atau-nama-file-artikel.html
DeDaftar artikel di kategori: www.domain.com/artikel/kategori
Daftar 10 artikel terbaru: www.domain.com/artikel
Yuk kita lihat prosesnya!
<?php
$mysqli = new mysqli("localhost", "root", "", "test");
// detail artikel
if($_GET['kategori'] && $_GET['item']){
$sql = $mysqli->query("SELECT tbl_artikel.judul,tbl_artikel.isi_artikel,tbl_artikel.tgl,tbl_user.nama from tbl_artikel INNER JOIN tbl_kategori on tbl_kategori.idartikel=tbl_artikel.idkategori INNER JOIN tbl_user on tbl_user.iduser=tbl_artikel.author where tbl_kategori.slug='$_GET[kategori]' AND tbl_artikel.slug='$_GET[item]'");
$data = mysqli_fetch_array($sql);
echo "<h1 class=\"title\">$data[judul]</h1>
<div class=\"div-info\">Oleh $data[nama] · pada ",date("j F Y H:i", strtotime($data['tgl'])),">
$data[isi_artikel]";
}
// daftar artikel dikategori terpilih
elseif($_GET['kategori'] && empty($_GET['item']){
$sql = $mysqli->query("SELECT tbl_artikel.judul,tbl_artikel.isi_artikel,tbl_artikel.tgl,tbl_user.nama from tbl_artikel INNER JOIN tbl_kategori on tbl_kategori.idartikel=tbl_artikel.idkategori INNER JOIN tbl_user on tbl_user.iduser=tbl_artikel.author where tbl_kategori.slug='$_GET[kategori]'");
while($data = mysqli_fetch_array($sql)){
echo "<h1 class=\"title\">$data[judul]</h1>
<div class=\"div-info\">Oleh $data[nama] · pada ",date("j F Y", strtotime($data['tgl'])),">";
$text = strip_tags($data[isi_artikel]); // hapus semua tag html (ambil hanya text saja)
$texts = explode(' ',$text); // pecah paragrap berdsarkan spasi
$jmlkata = 30;
for($i=0;$i<=$jmlkata-1;$i++) $ringkasan .= $texts[$i];
echo $ringkasan;
$ringkasan = '';
}
// daftar 10 artikel terbaru
else{
$sql = $mysqli->query("SELECT tbl_artikel.judul,tbl_artikel.isi_artikel,tbl_artikel.tgl,tbl_user.nama from tbl_artikel INNER JOIN tbl_kategori on tbl_kategori.idartikel=tbl_artikel.idkategori INNER JOIN tbl_user on tbl_user.iduser=tbl_artikel.author order by tbl_artikel.tgl desc limit 10");
while($data = mysqli_fetch_array($sql)){
echo "<h1 class=\"title\">$data[judul]</h1>
<div class=\"div-info\">Oleh $data[nama] · pada ",date("j F Y", strtotime($data['tgl'])),">";
$text = strip_tags($data[isi_artikel]); // hapus semua tag html (ambil hanya text saja)
$texts = explode(' ',$text); // pecah paragrap berdsarkan spasi
$jmlkata = 30;
for($i=0;$i<=$jmlkata-1;$i++) $ringkasan .= $texts[$i];
echo $ringkasan;
$ringkasan = '';
}
?>
Adapun file .htaccess yang kita butuhkan adalah sepeti di bawah ini!
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} -f [OR]
RewriteCond %{SCRIPT_FILENAME} -d
RewriteRule ^.*$ - [S=84]
RewriteRule ^artikel/([a-zA-Z0-9-_]+)/([a-zA-Z0-9-_]+)\.html$ artikel.php?kategori=$1&item=$2 [QSA,NC]
RewriteRule ^artikel/([a-zA-Z0-9]+)$ artikel.php?kategori=$1 [QSA,NC]
RewriteRule ^artikel$ artikel.php [QSA,NC]
</ifModule>