Cara Mengubah Query String Menjadi Path di URL

Mengubah query string (contoh: /profil.php?id=123&tab=kegiatan) menjadi clean path (contoh: /profil/123/kegiatan) merupakan standar wajib dalam pengembangan web modern. Pendekatan ini meningkatkan estetika tautan, performa search engine optimization (SEO), serta keterbacaan bagi pengguna. Proses ini dapat dieksekusi menggunakan konfigurasi peladen seperti Apache (.htaccess) atau Nginx, serta melalui sistem perutean (routing) pada kerangka kerja pemrograman seperti Express.js, Laravel, atau skrip PHP murni.

Metode Konversi Berdasarkan Lingkungan Sistem

Pemilihan metode konversi bergantung pada infrastruktur peladen web yang Anda gunakan. Tabel berikut merangkum pendekatan teknis beserta skenario penggunaannya.

Lingkungan / Teknologi Mekanisme Utama Contoh Transformasi URL
Apache Web Server Modul mod_rewrite & file .htaccess index.php?p=produk&id=5 → /produk/5
Nginx Web Server Blok try_files & arahan rewrite page.php?cat=news → /news
Node.js (Express) Route Parameters (req.params) /user?name=budi → /user/budi
PHP Native / Modern $_SERVER['REQUEST_URI'] parsing manual detail.php?slug=artikel-1 → /artikel/artikel-1

Implementasi Teknis Menggunakan Apache (.htaccess)

Jika peladen Anda menggunakan Apache, aktifkan modul mod_rewrite lalu buat file .htaccess di direktori root dokumen web Anda. Aturan di bawah ini akan menangkap parameter jalur dan meneruskannya secara internal ke skrip penanganan utama.

RewriteEngine On
RewriteBase /

# Jangan ubah jika file atau folder aslinya benar-benar ada di server
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Ubah /profil/123 menjadi index.php?page=profil&id=123
RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)$ index.php?page=$1&id=$2 [L,QSA]

Implementasi Teknis Menggunakan Nginx

Bagi pengguna peladen Nginx, konfigurasi ditulis langsung di dalam blok peladen (server block) pada berkas konfigurasi utama (misalnya /etc/nginx/sites-available/default).

server {
    listen 80;
    server_name contoh.com;
    root /var/www/html;
    index index.php index.html;

    location / {
        try_files $uri $uri/ @rewrite;
    }

    location @rewrite {
        # Meneruskan request ke index.php dengan mempertahankan parameter
        rewrite ^/([a-zA-Z0-9_-]+)/([0-9]+)$ /index.php?page=$1&id=$2 last;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    }
}

Penguraian Path di Sisi Aplikasi (PHP)

Setelah peladen mengarahkan URL bersih ke satu titik masuk (seperti index.php), Anda perlu memecah string URI di sisi kode aplikasi untuk membaca variabel yang dikirimkan.

<?php
// Mendapatkan URI yang diminta, misal: /profil/123
$request_uri = trim($_SERVER['REQUEST_URI'], '/');
$segments = explode('/', $request_uri);

// Menetapkan variabel berdasarkan posisi segmen
$page = isset($segments[0]) ? htmlspecialchars($segments[0]) : 'home';
$id   = isset($segments[1]) ? intval($segments[1]) : 0;

echo "Halaman: " . $page;
echo "ID: " . $id;
?>

Tips Troubleshooting Lapangan

Kendala yang sering muncul saat mengubah query string menjadi path adalah masalah jalur relatif aset (CSS, JavaScript, dan Gambar). Ketika URL diakses melalui /kategori/detail-item, browser akan mencoba memuat aset relatif dari folder /kategori/ alih-alih dari root.

Untuk mengatasi hal ini, pastikan Anda selalu menggunakan tag <base href="https://namadomain.com/"> di dalam bagian <head> dokumen HTML, atau gunakan jalur absolut mutlak (diawali dengan garis miring /) pada setiap pemanggilan sumber daya aset statis.