URL friendly dengan htaccess

URL Friendly adalah alamat atau URL web yang mudah dibaca dan biasanya menyertakan kata-kata yang menggambarkan konten pada halaman web tersebut.

url-friendly-dengan-htaccess.png

// Sebelum menggunakan URL Friendly
https://ajatsudrajat.net/index.php?url=about

// Setelah menggunakan URL Friendly
https://ajatsudrajat.net/about

Kemudian apa itu htaccess?

Htaccess adalah file dengan nama .htaccess yang berfungsi untuk konfigurasi pada web server Apache.

Salah satu contoh konfigurasi yang dapat dilakukan adalah URL Rewrite yang akan kita gunakan untuk keperluan membuat URL friendly ini.

Membuat URL Friendly

Ada dua contoh yang akan kita buat, pertama memanggil file php berdasarkan url request yang diterima dan yang kedua memanggil file php yang berisi class kemudian menginisialisasi class tersebut menjadi object dan memanggil method / function didalamnya berdasarkan url request.

Sebelumnya, pada root / folder website kita buatlah struktur file dan folder seperti berikut :


index.php
.htaccess
[class]
	About.php
[pages]
	about.php
	notfound.php

Kemudian pada file .htaccess isikan seperti berikut :


RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

Pada file .htaccess diatas, baris pertama kita mengaktifkan rewrite engine. Kemudian pada baris berikutnya kita menentukan kondisinya yaitu request selain direktori, file dan link akan diredirect ke file index.php dan ditampung oleh variable pertama ($1).

Nantinya pada file index.php kita dapat mengambil variable pertama tersebut menggunakan methode GET dengan index parameternya adalah url.

Contoh pertama

Dalam file index.php isinya seperti berikut :


<?php

$url = isset($_GET['url']) ? $_GET['url'] : '';

if(!empty($url))
{
	if(file_exists('pages/'.$url.'.php'))
	{
		require_once 'pages/'.$url.'.php';
	}
	else
	{
		require_once 'pages/notfound.php';
	}
}

Pada contoh pertama diatas, kita akan memanggil file php berdasar url request yang diterima, misalkan kalo kita panggil :


https://ajatsudrajat.net/about

Maka akan memanggil file about.php, kalo file about.php tidak ditemukan maka akan memanggil file notfound.php

Contoh kedua

Isi file About.php yang ada dalam folder class seperti berikut :


<?php

class About
{
	public function index()
	{
		echo 'About Website';
	}
	
	public function me()
	{
		echo 'About Me';
	}
	
	public function portfolio()
	{
		echo 'About Portfolio';
	}
}

Kemudian dalam file index.php ubah isinya menjadi seperti berikut :


<?php

$url = isset($_GET['url']) ? $_GET['url'] : ''; 
$url = rtrim($url, '/');
$url = explode('/', $url);


if(!empty($url[0]))
{

    if(file_exists('class/'.ucfirst($url[0]).'.php'))
	{
        require_once 'class/'.ucfirst($url[0]).'.php';
		
		$className = ucfirst($url[0]);
		$classObj = new $className;
		
		if(empty($url[1])
		{
			$classObj->index();
		}
		else
		{
			if(method_exists($classObj, $url[1]))
			{	
				if(isset($url[2]) && isset($url[3])){
					$classObj->{url[1]}($url[2], $url[3]);
				}elseif( isset($url[2]) && !isset($url[3])){
					$classObj->{$url[1]}($url[2]);
				}elseif(!isset($url[2]) && !isset($url[3])){
					$classObj->{$url[1]}();
				}
			}
		}	
    }
	else
	{
		require_once 'pages/notfound.php';
    }
}

Pada contoh kedua diatas, kita dapat memanggil method / function yang ada dalam class About dengan cara seperti berikut :


// memanggil function index
https://ajatsudrajat.net/about

// memanggil function me
https://ajatsudrajat.net/about/me

// memanggil function portfolio
https://ajatsudrajat.net/about/portfolio

Silahkan kreasikan lagi agar lebih sempurna, semoga bermanfaat.


Komentar