Cara Menghilangkan Index.php di URL CodeIgniter (Apache & Nginx)

Menghilangkan segmen index.php dari URL CodeIgniter dilakukan dengan mengaktifkan modul URL rewriting pada server web (Apache atau Nginx) serta menyesuaikan konfigurasi dasar pada file pengaturan aplikasi CodeIgniter. Langkah ini membuat struktur URL menjadi lebih bersih, ramah mesin pencari (SEO-friendly), dan profesional.

Secara default, kerangka kerja CodeIgniter menyertakan file index.php di setiap tautan rute internalnya. Untuk menghilangkannya, Anda memerlukan pengaturan file .htaccess pada server Apache atau blok server block (virtual host) pada Nginx, diikuti dengan penyesuaian variabel $base_url atau indexPage di dalam kode sumber.

1. Menghilangkan Index.php pada Server Apache (.htaccess)

Pastikan modul mod_rewrite pada server Apache Anda sudah aktif. Buat sebuah file bernama .htaccess di direktori root proyek Anda (sejajar dengan folder application, system, dan file index.php).

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

Jika aplikasi Anda berada di sub-direktori atau mengalami kendala pengalihan (redirect loop), tambahkan garis dasar RewriteBase setelah baris RewriteEngine On sesuai dengan nama folder proyek Anda.

2. Pengaturan Konfigurasi pada CodeIgniter

Setelah file .htaccess terpasang, sesuaikan konfigurasi internal framework tergantung versi CodeIgniter yang Anda gunakan:

CodeIgniter 3

Buka file application/config/config.php, lalu ubah variabel $config['index_page'] menjadi kosong:

$config['base_url'] = 'http://localhost/namaprojek/';
$config['index_page'] = '';

CodeIgniter 4

Buka file app/Config/App.php, cari variabel public $indexPage dan kosongkan nilainya:

public $indexPage = '';

3. Menghilangkan Index.php pada Server Nginx

Jika server produksi Anda menggunakan Nginx, Apache .htaccess tidak akan terbaca. Anda harus mengatur konfigurasi server block pada Nginx (biasanya terletak di /etc/nginx/sites-available/default atau file konfigurasi domain Anda).

server {
    listen 80;
    server_name namadomain.com;
    root /var/www/html/namaprojek/public;

    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

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

Tabel Perbandingan Metode Berdasarkan Web Server

Web Server File Konfigurasi Utama Modul/Directive yang Dibutuhkan Status URL Rewrite
Apache .htaccess mod_rewrite Otomatis via .htaccess
Nginx nginx.conf / sites-available try_files directive Manual via server block
IIS (Windows) web.config URL Rewrite Module Manual via XML rules

Troubleshooting Masalah Umum

Jika setelah melakukan konfigurasi di atas Anda mendapati error 404 Not Found atau halaman tidak dapat diakses selain halaman utama (homepage), periksa beberapa hal berikut:

  • Modul Apache Belum Aktif: Jalankan perintah sudo a2enmod rewrite pada terminal Linux, lalu restart Apache dengan sudo systemctl restart apache2.
  • AllowOverride None: Pada file konfigurasi utama Apache (misal apache2.conf atau httpd.conf), pastikan direktori proyek Anda memiliki izin AllowOverride All agar file .htaccess diizinkan bekerja.
  • Kesalahan Base URL: Pastikan variabel $base_url di CodeIgniter diisi dengan protokol yang benar (http:// atau https://) beserta garis miring di akhir (trailing slash).