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 rewritepada terminal Linux, lalu restart Apache dengansudo systemctl restart apache2. - AllowOverride None: Pada file konfigurasi utama Apache (misal
apache2.confatauhttpd.conf), pastikan direktori proyek Anda memiliki izinAllowOverride Allagar file.htaccessdiizinkan bekerja. - Kesalahan Base URL: Pastikan variabel
$base_urldi CodeIgniter diisi dengan protokol yang benar (http:// atau https://) beserta garis miring di akhir (trailing slash).