Cara Mengatasi Semua Route Laravel Menjadi 404 di Hosting
Masalah Semua Route Laravel Menjadi 404
Salah satu masalah yang sering muncul setelah aplikasi Laravel diunggah ke hosting adalah halaman utama dapat dibuka, tetapi halaman lainnya menghasilkan error:
404 Not Found
Sebagai contoh, halaman berikut dapat dibuka:
https://domainanda.com
Namun, route lain tidak dapat diakses:
https://domainanda.com/login
https://domainanda.com/dashboard
https://domainanda.com/produk
Masalah ini biasanya tidak berarti route Laravel hilang. Dalam banyak kasus, web server belum meneruskan request tersebut ke file index.php milik Laravel.
Laravel menggunakan pola front controller. Seluruh request aplikasi harus diarahkan ke public/index.php, kemudian Laravel menentukan controller, middleware, dan halaman yang perlu dijalankan. Karena itu, document root server harus mengarah ke folder public, bukan ke root project Laravel. (Laravel)
Penyebab Route Laravel Menjadi 404
Beberapa penyebab yang paling sering ditemukan adalah sebagai berikut.
1. File .htaccess Tidak Tersedia
Pada server Apache atau LiteSpeed, Laravel menggunakan file .htaccess di dalam folder public untuk mengarahkan request ke index.php.
Jika file tersebut tidak ikut terunggah, halaman utama mungkin masih terbuka, tetapi route lain akan menghasilkan 404.
File .htaccess termasuk file tersembunyi. Pada File Manager cPanel, file tersebut tidak terlihat apabila pilihan Show Hidden Files belum diaktifkan.
2. Document Root Tidak Mengarah ke Folder Public
Struktur Laravel umumnya seperti berikut:
project-laravel/
├── app/
├── bootstrap/
├── config/
├── database/
├── public/
│ ├── index.php
│ └── .htaccess
├── resources/
├── routes/
├── storage/
├── vendor/
├── artisan
└── .env
Folder yang seharusnya diakses oleh domain adalah:
project-laravel/public
Jika domain diarahkan ke root project atau folder lain, proses routing dapat gagal. Selain menimbulkan error, mengarahkan domain ke root project juga berisiko mengekspos file internal seperti .env, konfigurasi, dan source code. Dokumentasi Laravel menegaskan bahwa request web harus diarahkan ke public/index.php. (Laravel)
3. Isi Folder Public Dipindahkan tetapi index.php Belum Disesuaikan
Pada shared hosting, pengguna sering menempatkan source Laravel di luar public_html, kemudian memindahkan isi folder public ke public_html.
Strukturnya dapat menjadi seperti berikut:
/home/username/laravel-app
/home/username/public_html
Jika path di dalam public_html/index.php masih menggunakan struktur lama, aplikasi tidak dapat menemukan file Laravel yang diperlukan.
4. mod_rewrite Tidak Berjalan
Apache membutuhkan mod_rewrite agar aturan pada .htaccess dapat mengarahkan URL menuju index.php.
Selain modul tersebut, konfigurasi server juga harus mengizinkan aturan rewrite dari .htaccess. Apache menjelaskan bahwa aturan RewriteRule dalam .htaccess hanya diproses apabila konfigurasi server mengizinkannya melalui AllowOverride FileInfo atau AllowOverride All. (Apache HTTP Server)
Pada shared hosting, konfigurasi ini biasanya dikelola oleh penyedia hosting.
5. Route Cache Masih Menggunakan Data Lama
Laravel dapat menyimpan daftar route dalam cache agar proses pemuatan aplikasi lebih cepat.
Jika route baru ditambahkan atau diubah setelah cache dibuat, aplikasi mungkin masih menggunakan daftar route sebelumnya.
Laravel menyediakan route:cache untuk mengoptimalkan pendaftaran route dan optimize:clear untuk menghapus cache hasil optimasi. (Laravel)
6. Route Tidak Terdaftar
Error 404 juga dapat terjadi karena route memang belum tersedia di dalam aplikasi.
Route halaman web biasanya ditulis di:
routes/web.php
Sedangkan route API biasanya berada di:
routes/api.php
Kesalahan penulisan URL, prefix, nama parameter, atau middleware dapat membuat route tidak cocok dengan request pengguna.
7. Aplikasi Dipasang di Dalam Subfolder
Jika Laravel dijalankan melalui URL seperti:
https://domainanda.com/aplikasi
aturan rewrite mungkin membutuhkan penyesuaian karena aplikasi tidak berada pada root domain.
Apache menjelaskan bahwa RewriteBase dapat diperlukan ketika aturan rewrite bekerja dalam subdirektori dan menghasilkan path relatif. (Apache HTTP Server)
8. Terdapat .htaccess Lain yang Bertabrakan
File .htaccess pada folder induk dapat memiliki aturan redirect atau rewrite yang memengaruhi aplikasi Laravel.
cPanel menjelaskan bahwa urutan aturan pada .htaccess dapat menyebabkan konfigurasi aplikasi pihak ketiga bertabrakan atau tertimpa oleh redirect lain. (cPanel & WHM Documentation)
Cara Mengatasi Semua Route Laravel Menjadi 404
Ikuti langkah berikut secara berurutan agar sumber masalah lebih mudah ditemukan.
Langkah 1: Periksa Route Laravel
Masuk ke folder utama project Laravel melalui Terminal cPanel atau SSH:
cd /home/username/laravel-app
Kemudian jalankan:
php artisan route:list
Perintah tersebut akan menampilkan seluruh route yang terdaftar.
Contoh hasil:
GET|HEAD /
GET|HEAD login
GET|HEAD dashboard
GET|HEAD produk
POST login
Jika route yang dicari tidak muncul, periksa file:
routes/web.php
Contoh route sederhana:
use Illuminate\Support\Facades\Route;
Route::get('/produk', function () {
return view('produk');
});
Jika route tersedia pada route:list, tetapi tetap 404 melalui browser, masalah kemungkinan berada pada konfigurasi hosting atau rewrite.
Langkah 2: Periksa Document Root Domain
Buka cPanel, kemudian masuk ke menu:
Domains
Periksa bagian Document Root.
Konfigurasi yang ideal:
/home/username/laravel-app/public
Jangan menggunakan:
/home/username/laravel-app
Jika hosting mengizinkan perubahan document root, arahkan domain langsung ke folder public.
Laravel merekomendasikan agar server hanya melayani file dari folder public, karena folder tersebut berisi index.php sebagai pintu masuk aplikasi. (Laravel)
Langkah 3: Periksa File .htaccess
Buka File Manager cPanel.
Klik:
Settings
Kemudian aktifkan:
Show Hidden Files (dotfiles)
Periksa apakah file berikut tersedia:
public_html/.htaccess
atau:
laravel-app/public/.htaccess
cPanel menjelaskan bahwa file .htaccess merupakan file tersembunyi dan pilihan Show Hidden Files perlu diaktifkan agar dapat dilihat melalui File Manager. (cPanel & WHM Documentation)
Gunakan file .htaccess asli dari folder public project Laravel.
Contoh aturan dasarnya:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
Aturan tersebut akan membiarkan file dan folder yang benar-benar tersedia dibuka secara langsung. Request lainnya akan diarahkan ke index.php.
Apache menjelaskan bahwa pola dalam .htaccess tidak diawali garis miring karena path direktori sudah dihapus sebelum pencocokan aturan dilakukan. (Apache HTTP Server)
Langkah 4: Gunakan Struktur Hosting yang Aman
Jika document root domain utama tidak dapat diubah, gunakan struktur berikut:
/home/username/laravel-app
/home/username/public_html
Folder laravel-app menyimpan source Laravel:
app
bootstrap
config
database
resources
routes
storage
vendor
.env
artisan
Folder public_html hanya menyimpan isi dari folder public:
index.php
.htaccess
build
favicon.ico
robots.txt
storage
Jangan memindahkan seluruh project Laravel ke public_html jika tidak diperlukan.
Langkah 5: Sesuaikan Path index.php
Jika isi folder public dipindahkan ke public_html, buka:
public_html/index.php
Kemudian sesuaikan path menuju source Laravel.
Contoh source berada di:
/home/username/laravel-app
Maka index.php dapat menggunakan pola berikut:
<?php
use Illuminate\Http\Request;
define('LARAVEL_START', microtime(true));
if (file_exists($maintenance = __DIR__.'/../laravel-app/storage/framework/maintenance.php')) {
require $maintenance;
}
require __DIR__.'/../laravel-app/vendor/autoload.php';
(require_once __DIR__.'/../laravel-app/bootstrap/app.php')
->handleRequest(Request::capture());
Sesuaikan nama folder laravel-app dengan nama folder project Anda.
Gunakan file public/index.php asli dari project sebagai dasar. Ubah hanya path menuju storage, vendor, dan bootstrap.
Langkah 6: Bersihkan Cache Route
Masuk ke folder utama Laravel:
cd /home/username/laravel-app
Kemudian jalankan:
php artisan optimize:clear
Perintah tersebut membersihkan cache konfigurasi, route, event, view, dan cache optimasi lain yang dibuat oleh Laravel. (Laravel)
Anda juga dapat membersihkan route secara khusus:
php artisan route:clear
Setelah aplikasi kembali berjalan normal pada server production, buat ulang cache:
php artisan optimize
Laravel menyediakan perintah optimize untuk menyimpan konfigurasi, event, route, dan view dalam cache sebagai bagian dari proses deployment production. (Laravel)
Langkah 7: Periksa APP_URL
Buka file .env dan pastikan APP_URL sesuai dengan domain:
APP_URL=https://domainanda.com
Jika aplikasi berada pada subdomain:
APP_URL=https://app.domainanda.com
Setelah mengubah .env, jalankan:
php artisan optimize:clear
Walaupun APP_URL biasanya bukan penyebab utama semua route menjadi 404, konfigurasi yang salah dapat memengaruhi URL yang dibuat aplikasi, redirect, asset, dan tautan tertentu.
Langkah 8: Periksa Route dengan Prefix
Periksa apakah route menggunakan prefix tertentu.
Contoh:
Route::prefix('admin')->group(function () {
Route::get('/dashboard', function () {
return view('admin.dashboard');
});
});
Route tersebut harus dibuka melalui:
https://domainanda.com/admin/dashboard
Bukan:
https://domainanda.com/dashboard
Periksa hasilnya melalui:
php artisan route:list
Langkah 9: Periksa Parameter Route
Contoh route:
Route::get('/produk/{slug}', [ProductController::class, 'show']);
URL yang benar harus memiliki parameter:
https://domainanda.com/produk/nama-produk
Membuka URL berikut tidak akan cocok dengan route tersebut:
https://domainanda.com/produk
Jika halaman daftar produk diperlukan, tambahkan route terpisah:
Route::get('/produk', [ProductController::class, 'index']);
Route::get('/produk/{slug}', [ProductController::class, 'show']);
Langkah 10: Periksa Urutan Route Dinamis
Urutan route dapat memengaruhi hasil pencocokan URL.
Contoh:
Route::get('/produk/{slug}', [ProductController::class, 'show']);
Route::get('/produk/tambah', [ProductController::class, 'create']);
Pada kondisi tertentu, kata tambah dapat dianggap sebagai nilai dari {slug}.
Susun route khusus terlebih dahulu:
Route::get('/produk/tambah', [ProductController::class, 'create']);
Route::get('/produk/{slug}', [ProductController::class, 'show']);
Anda juga dapat membatasi parameter:
Route::get('/produk/{id}', [ProductController::class, 'show'])
->whereNumber('id');
Langkah 11: Periksa Konfigurasi Aplikasi dalam Subfolder
Jika Laravel dibuka melalui:
https://domainanda.com/aplikasi
tambahkan RewriteBase apabila konfigurasi hosting membutuhkannya:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /aplikasi/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
Penggunaan RewriteBase bergantung pada struktur hosting dan cara path relatif diproses. Apache menjelaskan bahwa directive ini dapat diperlukan saat substitusi rewrite relatif digunakan dalam direktori tertentu. (Apache HTTP Server)
Namun, penggunaan subfolder sebaiknya dihindari jika aplikasi dapat dipasang pada domain atau subdomain tersendiri.
Langkah 12: Uji Apakah Rewrite Berjalan
Tambahkan route pengujian di routes/web.php:
Route::get('/test-route', function () {
return 'Route Laravel berhasil';
});
Bersihkan cache:
php artisan optimize:clear
Kemudian buka:
https://domainanda.com/test-route
Jika route tersebut tetap 404, sedangkan muncul pada php artisan route:list, berarti request belum diarahkan dengan benar ke Laravel.
Periksa kembali:
Document root.
File
.htaccess.Dukungan
mod_rewrite.Path
index.php.Aturan
.htaccesspada folder induk.
Langkah 13: Uji index.php Secara Langsung
Untuk pengujian sementara, buka:
https://domainanda.com/index.php/test-route
Jika URL tersebut berhasil, tetapi URL berikut tidak:
https://domainanda.com/test-route
kemungkinan besar masalah berada pada rewrite URL atau .htaccess.
Setelah pemeriksaan selesai, aplikasi tetap sebaiknya menggunakan URL bersih tanpa index.php.
Langkah 14: Periksa Error Log
Buka cPanel, kemudian masuk ke:
Metrics → Errors
Periksa juga:
public_html/error_log
Untuk log Laravel, periksa:
storage/logs/laravel.log
Pesan yang dapat menjadi petunjuk antara lain:
File not found
RewriteRule not allowed here
Options FollowSymLinks not allowed here
Request exceeded the limit of internal redirects
Permission denied
Apache menjelaskan bahwa kesalahan konfigurasi rewrite, termasuk pengulangan internal redirect, dapat dilihat melalui error log server. (Apache HTTP Server)
Langkah 15: Hubungi Penyedia Hosting
Jika .htaccess sudah benar tetapi route tetap 404, hubungi penyedia hosting dan minta mereka memeriksa:
Apakah
mod_rewriteaktif.Apakah
.htaccessdiizinkan.Apakah
AllowOverridemendukungFileInfo.Apakah terdapat aturan keamanan yang memblokir rewrite.
Apakah document root domain sudah benar.
Apakah terdapat konfigurasi virtual host yang bertabrakan.
Contoh pesan kepada penyedia hosting:
Mohon bantu periksa konfigurasi Apache untuk domain saya. Aplikasi Laravel dapat membuka halaman utama, tetapi seluruh route lain menjadi 404. File .htaccess sudah tersedia. Mohon pastikan mod_rewrite aktif dan AllowOverride mengizinkan aturan rewrite.
Urutan Perbaikan yang Disarankan
Lakukan pemeriksaan dengan urutan berikut:
Jalankan
php artisan route:list.Pastikan route memang terdaftar.
Periksa document root domain.
Pastikan file
.htaccesstersedia.Periksa path pada
index.php.Jalankan
php artisan optimize:clear.Uji route sederhana.
Uji URL menggunakan
index.php.Periksa error log.
Periksa konflik
.htaccess.Hubungi penyedia hosting jika rewrite tidak berjalan.
Kesalahan yang Perlu Dihindari
Memindahkan Seluruh Project ke public_html
Tindakan ini dapat membuat .env, source code, dan file internal lebih berisiko diakses melalui internet.
Menghapus .htaccess
Tanpa aturan rewrite, route Laravel selain file atau folder fisik dapat menghasilkan 404.
Mengubah Semua Permission Menjadi 777
Permission 777 tidak memperbaiki masalah routing dan dapat menimbulkan risiko keamanan.
Menambahkan Redirect Tanpa Memahami Urutannya
Aturan redirect yang ditempatkan sebelum aturan Laravel dapat membuat request dialihkan ke lokasi yang salah. cPanel mencatat bahwa urutan aturan .htaccess dapat memengaruhi aplikasi pihak ketiga. (cPanel & WHM Documentation)
Mengubah Route tanpa Membersihkan Cache
Jika route cache masih aktif, perubahan route mungkin belum digunakan oleh aplikasi.
Mengedit index.php Tanpa Backup
Kesalahan path dapat membuat aplikasi gagal menemukan vendor/autoload.php atau bootstrap/app.php.
Checklist Route Laravel 404
Sebelum melakukan pengujian terakhir, pastikan:
Route muncul pada
php artisan route:list.Domain mengarah ke folder
public.File
index.phptersedia.File
.htaccesstersedia.Path di dalam
index.phpsudah benar.mod_rewriteaktif..htaccessdiizinkan oleh server.Tidak terdapat redirect yang bertabrakan.
Route cache sudah dibersihkan.
APP_URLsesuai dengan domain.Prefix dan parameter route sudah benar.
Error log telah diperiksa.
Bantuan Deployment Laravel dari Ovla Media
Masalah semua route Laravel menjadi 404 biasanya dapat diatasi dengan memperbaiki document root, .htaccess, path index.php, atau cache route.
Namun, deployment Laravel di hosting juga dapat mengalami masalah lain, seperti:
Error 403 Forbidden.
Vite manifest tidak ditemukan.
Storage link tidak berfungsi.
Database gagal terhubung.
Session tidak tersimpan.
Permission folder tidak sesuai.
Application key tidak ditemukan.
Versi PHP tidak kompatibel.
File
.envtidak terbaca.Aplikasi gagal setelah pindah server.
Ovla Media menyediakan layanan pengembangan, deployment, perbaikan, dan pemeliharaan aplikasi Laravel untuk shared hosting, cPanel, maupun VPS.
Kesimpulan
Semua route Laravel menjadi 404 di hosting biasanya terjadi karena request tidak diarahkan menuju public/index.php.
Langkah pertama adalah memastikan route tersedia:
php artisan route:list
Kemudian pastikan domain mengarah ke:
/project-laravel/public
Periksa file .htaccess, sesuaikan path index.php, lalu bersihkan cache:
php artisan optimize:clear
Jika route dapat dibuka menggunakan index.php tetapi tidak dapat dibuka melalui URL biasa, masalah hampir pasti berkaitan dengan rewrite atau konfigurasi .htaccess.
Jangan mengatasi masalah ini dengan permission 777 atau memindahkan seluruh project ke folder publik. Gunakan struktur hosting yang aman agar aplikasi dapat berjalan dengan baik dan file internal tetap terlindungi.
Butuh implementasi untuk kebutuhan bisnis?
OVLA Media membantu pengembangan dan optimasi aplikasi web, integrasi sistem, serta solusi Laravel sesuai kebutuhan perusahaan Anda.
Artikel Terkait
Cara Membuat Audit Log Aktivitas Pengguna di Laravel
Audit log Laravel digunakan untuk mencatat aktivitas pengguna di dalam aplikasi, seperti login, logout, membuat data, mengubah data, dan menghapus data. Dengan audit log, administrator dapat mengetahui siapa yang melakukan perubahan, kapan aktivitas terjadi, dan data apa yang terpengaruh.
Cara Membuat Sinkronisasi Stok Antar-Aplikasi Menggunakan Laravel API
Sinkronisasi stok antar-aplikasi memungkinkan jumlah persediaan tetap konsisten antara sistem seperti POS, inventory, marketplace, dan gudang. Laravel API dapat digunakan untuk mengirim perubahan stok secara otomatis sehingga setiap aplikasi memiliki informasi persediaan yang lebih akurat.
Cara Membatasi Percobaan Login Menggunakan Rate Limiting Laravel
Rate limiting pada Laravel dapat digunakan untuk membatasi jumlah percobaan login dalam periode tertentu. Fitur ini membantu mengurangi risiko brute-force dengan menolak sementara permintaan login yang terlalu banyak dari pengguna atau alamat IP yang sama.