Routing URL PHP Native: Panduan Kode & Implementasi

Routing URL pada PHP native adalah teknik mengarahkan permintaan (request) URL dari peramban ke file atau fungsi handler tertentu tanpa harus membuat struktur direktori fisik yang sesuai dengan URL tersebut. Teknik ini umumnya digunakan untuk menghasilkan URL yang bersih (clean URLs) dan ramah SEO (search engine optimization).

Untuk mengimplementasikan routing URL di PHP native tanpa menggunakan framework pihak ketiga, Anda memerlukan dua komponen utama: file konfigurasi server web (seperti .htaccess pada Apache) untuk menangkap semua request, dan file router PHP utama (biasanya index.php) untuk memetakan jalur (path) URL ke controller atau file tujuan.

Langkah 1: Konfigurasi Web Server (.htaccess)

Jika Anda menggunakan server web Apache, pastikan modul mod_rewrite aktif. Buat file bernama .htaccess di direktori root proyek Anda untuk mengarahkan semua lalu lintas masuk ke satu titik masuk (index.php), kecuali untuk file statis yang benar-benar ada seperti gambar atau CSS.

Options -MultiViews
RewriteEngine On

# Izinkan file atau direktori yang ada diakses langsung
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Arahkan semua request lainnya ke index.php
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

Langkah 2: Membuat Router Script di PHP

Setelah .htaccess mengalihkan URL ke index.php, Anda dapat memparsing parameter $_GET['url'] di dalam skrip PHP untuk menentukan halaman atau logika apa yang harus dieksekusi.

<?php
// index.php

// Mengambil URL dari parameter dan membersihkannya
$request = isset($_GET['url']) ? rtrim($_GET['url'], '/') : '';
$request = filter_var($request, FILTER_SANITIZE_URL);

// Memecah URL berdasarkan garis miring (/)
$urlSegments = explode('/', $request);

// Menentukan rute dasar
$route = !empty($urlSegments[0]) ? $urlSegments[0] : 'home';

// Logika pencocokan rute sederhana
switch ($route) {
    case 'home':
        require 'views/home.php';
        break;
        
    case 'about':
        require 'views/about.php';
        break;
        
    case 'user':
        // Contoh menangkap parameter dinamis, misal: /user/123
        $userId = isset($urlSegments[1]) ? intval($urlSegments[1]) : 0;
        require 'views/user.php';
        break;
        
    default:
        http_response_code(404);
        require 'views/404.php';
        break;
}
?>

Matriks Perbandingan Pendekatan Routing PHP

Metode Routing Kelebihan Kekurangan Tingkat Kompleksitas
Native Switch/Case Tanpa dependensi, ringan, mudah dipahami untuk proyek kecil. Sulit dikelola jika rute sudah mencapai ratusan (monolitik). Rendah
Array Mapping / Dispatcher Struktur kode lebih rapi, pemisahan pola URL dan aksi lebih jelas. Membutuhkan sedikit logika tambahan untuk parsing parameter regex. Menengah
Framework (Laravel/Symfony) Fitur lengkap, middleware bawaan, komunitas besar. Overhead tinggi, ukuran file besar, kurva belajar curam. Tinggi

Tips Troubleshooting & Keamanan Lapangan

Dalam membangun sistem routing PHP native mandiri, beberapa aspek keamanan dan teknis harus diperhatikan secara seksama:

  • Path Traversal: Selalu lakukan sanitasi pada input URL menggunakan filter_var atau fungsi regex untuk mencegah pengguna memanggil file sistem di luar direktori yang diizinkan (misalnya ../../etc/passwd).
  • Base URL: Jika aplikasi tidak diletakkan di root domain (misalnya localhost/my-project/), pastikan Anda mendefinisikan <base href="/my-project/"> pada tag <head> HTML agar pemuatan asset CSS dan JavaScript tidak rusak.
  • Error 404 Header: Jangan hanya menampilkan tampilan halaman 404, tetapi pastikan juga server mengirimkan kode status HTTP yang benar menggunakan fungsi http_response_code(404) agar mesin pencari tahu bahwa halaman tersebut tidak ada.