Kasus membuat URL yang cantik dengan menghilangkan index.php ini tidak hanya terjadi di Laravel, melainkan hampir disemua Web Framework dan CMS. Biasanya masalah ini timbul karena mod_rewrite nya tidak ada. Tapi, untuk kebanyakan pengaturan server saat ini mod_rewrite sudah terinstall. Oleh karena itu, sudah pasti ada masalah lain, sehingga index.php nya ini masih muncul. Untuk itu, kita hadirkan cara menghilangkan index.php di Laravel.
Tentang Laravel
Laravel menjadi framework PHP yang paling tenar di tahun 2015-2016 karena kemudahannya dalam integrasi dengan komponen PHP lainnya. Selain itu, kebangkitan laravel ini juga adalah akibat kejenuhan dari para programmer web PHP karena tidak ada pengembangan yang signifikan terhadap bahasa pemrograman ini. Sehingga laravel hadir menjadi suatu solusi dan patut dipelajari oleh beberapa kalangan web programmer. Namun, semakin kuat integrasi suatu sistem pastilah keterikatan dengan sistem ini tidak jarang membuahkan masalah. Seperti kasus yang paling sering ditemukan adalah menghilangkan index.php supaya urlnya SEO Friendly.
Skenario
Berikut ini adalah skenario yang berisikan kondisi sistem ketika akan dihilangkan index.php di folder public. Adapun spesifikasi server yang digunakan antara lain:
- Laravel 5.0
- Apache 2.2 httpd
- php56w
- MariaDB
- Directory Install laravel /var/www/html/
- Yang digunakan http://example.com/public. Public tidak dihilangkan.
Pengaturan Laravel
Kesalahan yang sering terjadi ketika migrasi Laravel ke server biasanya disebabkan oleh pengaturan laravel itu sendiri. Sehingga, mengakibatkan error yang berkepanjangan. Bisa mulai dari tidak adanya dot env, htaccess, atau salah versi Laravel ketika mencari solusi di internet. Maka untuk itu pertama-tama kita harus memastikan versi laravel yang akan digunakan. Berikut ini adalah caranya.
#masuk ke directory laravel dulu cd /var/www/html #kemudian gunakan artisan php artisan --version
Setelah mengeksekusi perintah tersebut, kita bisa yakin bahwa laravel yang digunakan sudah pasti versinya.
Periksa file .ENV
Pada dasarnya dalam penggunaan laravel, dot env ini memang sangat kejam apalagi ketika copy paste biasanya file dot env ini tidak ikut terbawa. Begitu pula dengan htaccess-nya. Sebagai langkah awal kita akan cek dot env nya apakah sudah ada atau belum. Jika belum ada maka tambahkan. Copy paste dari laravel env example di github kemudian paste kan ke dot env di directory root laravel. Setelah itu, kemudian sesuaikan pengaturannya seperti key dan koneksi database.
Check Key Hash
Biasanya hash key yang ada di konfigurasi laravel ini, haruslah berisikan 8,16,24,32 digit karakter. Jadi pastikan ini diisi dulu sesuai dengan digit yang ada jika menggunakan php versi 5.6.
Check Koneksi Database
Pastikan koneksi database sudah teruji dan valid.
Error Whoops…
jika ada error whoops seperti itu, kemungkinan besar file dot env nya memang belum ada.
Berikut ini adalah sumber kode dot env dari laravel.
APP_NAME=Laravel APP_ENV=local APP_KEY= APP_DEBUG=true APP_LOG_LEVEL=debug APP_URL=http://localhost DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=homestead DB_USERNAME=homestead DB_PASSWORD=secret BROADCAST_DRIVER=log CACHE_DRIVER=file SESSION_DRIVER=file QUEUE_DRIVER=sync REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379 MAIL_DRIVER=smtp MAIL_HOST=smtp.mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null PUSHER_APP_ID= PUSHER_APP_KEY= PUSHER_APP_SECRET=
Kedua Cek konfigurasi HTTPD
Untuk sistem operasi CentOS 6, lokasi pengaturan httpd ada di /etc/httpd/conf/httpd.conf. Pastikan directive yang ada dibawah /var/www/html sudah AllowOverride All dari AllowOverride None. Perintah ini berfungsi untuk, mengizinkan directory tersebut untuk diubah dengan menggunakan htaccess didalamnya.
Pengaturan .HTACCESS
Setelah itu kita akan berlanjut ke pemeriksaan dot htaccess di dalam folder public. Jika yang bawaan dari github laravel tidak berjalan dengan baik, bisa gunakan kode ini.
RewriteEngine On RewriteBase /public/ RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
Dengan demikian, situs laravel bisa diakses dengan menggunakan alamat http://example.com/public tanpa harus menggunakan index.php untuk setiap controllernya. Semoga membantu.