Cara Mengatasi Error 403 Forbidden pada Laravel di cPanel
Apa Itu Error 403 Forbidden?
Error 403 Forbidden adalah respons dari web server yang menandakan bahwa halaman atau file ditemukan, tetapi akses terhadapnya tidak diizinkan.
Pesan yang muncul biasanya seperti berikut:
403 Forbidden
Access to this resource on the server is denied.
Pada aplikasi Laravel yang diunggah ke cPanel, error ini sering muncul sebelum Laravel berhasil dijalankan. Artinya, masalah biasanya berada pada konfigurasi hosting, lokasi file, permission, ownership, atau aturan .htaccess.
Dokumentasi cPanel menjelaskan bahwa kode 403 muncul ketika server tidak mengizinkan pengunjung mengakses file yang diminta. Salah satu pemeriksaan pertama yang disarankan adalah memeriksa permission file dan folder. (cPanel & WHM Documentation)
Penyebab Error 403 pada Laravel di cPanel
Beberapa penyebab yang paling sering ditemukan adalah sebagai berikut.
1. Domain Tidak Mengarah ke Folder Public
Semua permintaan menuju aplikasi Laravel seharusnya masuk melalui file:
public/index.php
Folder public merupakan pintu masuk aplikasi dan berisi file yang memang boleh diakses melalui internet.
Jika domain diarahkan ke folder utama Laravel, server dapat menolak akses atau menampilkan daftar folder yang tidak diizinkan.
Struktur Laravel yang benar biasanya seperti berikut:
project-laravel/
├── app/
├── bootstrap/
├── config/
├── public/
│ ├── index.php
│ └── .htaccess
├── resources/
├── routes/
├── storage/
├── vendor/
├── artisan
└── .env
Laravel menyarankan agar web server mengarahkan seluruh permintaan ke folder public, bukan ke folder utama project. (Laravel)
2. File index.php Tidak Ditemukan
Web server membutuhkan file index sebagai halaman awal.
Jika folder tujuan domain tidak memiliki index.php, server dapat menampilkan error 403, terutama jika fitur directory listing dinonaktifkan.
Periksa apakah file berikut tersedia:
public_html/index.php
atau jika document root langsung diarahkan ke folder Laravel:
project-laravel/public/index.php
3. Permission File atau Folder Tidak Sesuai
Permission menentukan siapa yang dapat membaca, menulis, atau menjalankan file.
Permission yang terlalu terbatas dapat membuat Apache, LiteSpeed, atau PHP gagal membaca aplikasi.
Sebagai pedoman umum pada shared hosting:
Folder: 755
File: 644
Namun, kebutuhan permission dapat berbeda tergantung konfigurasi server dan ownership file.
Hindari menggunakan permission 777 karena memberikan hak baca, tulis, dan eksekusi kepada semua pengguna server.
4. Ownership File Berbeda
File yang diunggah, dipindahkan, atau diekstrak melalui proses tertentu dapat memiliki pemilik yang berbeda dari akun cPanel.
Walaupun permission terlihat benar, server tetap dapat menolak akses apabila ownership tidak sesuai.
Pada shared hosting, pengguna biasanya tidak memiliki izin menjalankan chown. Masalah ownership perlu diperbaiki oleh penyedia hosting.
5. File .htaccess Hilang atau Bermasalah
Laravel menggunakan file .htaccess pada folder public untuk mengarahkan permintaan ke index.php.
Masalah dapat terjadi jika:
File
.htaccesstidak ikut terunggah.Penulisannya salah.
Terdapat aturan yang tidak didukung hosting.
File berasal dari project atau versi Laravel yang berbeda.
Mod Rewrite tidak tersedia.
Terdapat aturan blokir alamat IP.
Terdapat konfigurasi
Deny from all.
Apache mengizinkan konfigurasi per folder melalui .htaccess, tetapi directive yang tidak diizinkan oleh konfigurasi server dapat menghasilkan error. (Apache HTTP Server)
6. Folder Storage dan Bootstrap Cache Tidak Dapat Ditulis
Laravel membutuhkan akses tulis ke folder berikut:
storage
bootstrap/cache
Folder tersebut digunakan untuk menyimpan log, cache, session berbasis file, view hasil kompilasi, dan data sementara lainnya.
Laravel menyatakan bahwa proses web server harus memiliki izin menulis ke folder storage dan bootstrap/cache. (Laravel)
7. ModSecurity atau Firewall Memblokir Permintaan
cPanel dapat menggunakan ModSecurity atau sistem keamanan lain untuk memblokir permintaan yang dianggap mencurigakan.
Pemblokiran dapat terjadi pada:
URL dengan parameter tertentu.
Formulir yang mengandung pola tertentu.
Request API.
Upload file.
Permintaan dari alamat IP tertentu.
Terlalu banyak request dalam waktu singkat.
Jika halaman utama dapat dibuka tetapi halaman atau tindakan tertentu menghasilkan 403, kemungkinan masalahnya berasal dari aturan keamanan server.
8. Directory Privacy Aktif
Fitur Directory Privacy pada cPanel dapat melindungi folder menggunakan username dan password.
Jika fitur tersebut aktif secara tidak sengaja pada public_html atau folder domain, pengunjung dapat mengalami masalah akses.
cPanel menyediakan fitur Directory Privacy untuk membatasi akses ke folder tertentu. (cPanel & WHM Documentation)
Cara Mengatasi Error 403 Forbidden pada Laravel
Ikuti pemeriksaan berikut secara berurutan agar penyebabnya lebih mudah ditemukan.
Langkah 1: Periksa Document Root Domain
Buka cPanel, kemudian masuk ke menu:
Domains
Periksa bagian Document Root dari domain atau subdomain yang digunakan.
Konfigurasi terbaik adalah mengarah langsung ke folder:
/home/username/project-laravel/public
Contohnya:
/home/ovlamedi/OVLAWEB/public
Dengan konfigurasi tersebut, server akan menjalankan public/index.php sebagai pintu masuk aplikasi.
Jangan mengarahkan document root ke:
/home/username/project-laravel
karena folder tersebut berisi .env, source code, konfigurasi, dan file internal lainnya.
Langkah 2: Gunakan Struktur yang Aman di Shared Hosting
Pada beberapa shared hosting, document root domain utama tidak dapat diubah dari public_html.
Anda dapat menggunakan struktur seperti berikut:
/home/username/OVLAWEB
/home/username/public_html
Folder OVLAWEB menyimpan seluruh source Laravel:
app
bootstrap
config
database
resources
routes
storage
vendor
.env
artisan
Sementara itu, public_html hanya menyimpan isi folder public Laravel:
index.php
.htaccess
build
favicon.ico
robots.txt
storage
Jangan memindahkan seluruh project Laravel ke public_html jika tidak diperlukan.
Langkah 3: Sesuaikan Path pada index.php
Jika isi folder public dipindahkan ke public_html, path pada index.php perlu diarahkan ke lokasi source Laravel.
Sebagai contoh, source Laravel berada di:
/home/username/OVLAWEB
dan file publik berada di:
/home/username/public_html
Pada Laravel versi modern, bagian path di public_html/index.php dapat disesuaikan seperti berikut:
<?php
use Illuminate\Http\Request;
define('LARAVEL_START', microtime(true));
if (file_exists($maintenance = __DIR__.'/../OVLAWEB/storage/framework/maintenance.php')) {
require $maintenance;
}
require __DIR__.'/../OVLAWEB/vendor/autoload.php';
(require_once __DIR__.'/../OVLAWEB/bootstrap/app.php')
->handleRequest(Request::capture());
Nama folder OVLAWEB harus disesuaikan dengan lokasi project Anda.
Untuk Laravel versi lama, bagian akhirnya dapat menggunakan pola berbeda. Gunakan file public/index.php bawaan project sebagai dasar, lalu ubah hanya path menuju vendor, bootstrap, dan storage.
Langkah 4: Pastikan File .htaccess Tersedia
Aktifkan pilihan Show Hidden Files pada File Manager cPanel.
Setelah itu, periksa apakah file berikut tersedia:
public_html/.htaccess
Jika tidak tersedia, salin file .htaccess dari folder public project Laravel.
Contoh aturan dasar Laravel:
<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>
Sebaiknya gunakan .htaccess asli yang berasal dari project Laravel Anda karena isi file dapat berbeda berdasarkan versi atau kebutuhan aplikasi.
Langkah 5: Periksa Permission File dan Folder
Melalui File Manager cPanel, klik kanan file atau folder, kemudian pilih:
Change Permissions
Gunakan permission dasar berikut sebagai referensi:
Folder project: 755
Folder public_html: 755
File index.php: 644
File .htaccess: 644
File PHP lainnya: 644
Pastikan folder induk juga dapat dibaca dan diakses oleh server.
Jika memiliki akses Terminal atau SSH, permission dasar dapat diperiksa menggunakan:
ls -la
Untuk mengatur file tertentu:
chmod 755 public_html
chmod 644 public_html/index.php
chmod 644 public_html/.htaccess
Jangan langsung menggunakan:
chmod -R 777
karena tindakan tersebut dapat membuka akses berlebihan ke seluruh project.
Langkah 6: Periksa Storage dan Bootstrap Cache
Masuk ke folder utama Laravel:
cd /home/username/OVLAWEB
Pastikan folder berikut dapat ditulis:
storage
bootstrap/cache
Pada banyak konfigurasi shared hosting, permission berikut dapat menjadi titik awal:
chmod -R 775 storage
chmod -R 775 bootstrap/cache
Namun, permission harus disesuaikan dengan ownership dan cara PHP dijalankan pada server.
Jika PHP berjalan menggunakan user akun cPanel yang sama, permission 755 mungkin sudah cukup. Jika masih terjadi masalah, periksa ownership atau tanyakan kepada penyedia hosting.
Langkah 7: Periksa Ownership
Gunakan perintah berikut jika Terminal tersedia:
ls -la /home/username/OVLAWEB
Perhatikan nama pemilik file dan folder.
File seharusnya dimiliki oleh akun cPanel yang sesuai.
Jika ownership berbeda dan Anda tidak dapat memperbaikinya, hubungi penyedia hosting dengan permintaan seperti berikut:
Mohon bantu periksa dan reset ownership file pada folder aplikasi Laravel karena website menghasilkan error 403 Forbidden.
Langkah 8: Uji File Sederhana
Buat file baru di public_html dengan nama:
test.html
Isi file:
<h1>Test berhasil</h1>
Kemudian buka:
https://domainanda.com/test.html
Hasil pengujian dapat membantu menentukan sumber masalah.
Jika test.html juga menghasilkan 403, masalah kemungkinan berasal dari:
Permission.
Ownership.
Document root.
Directory Privacy.
Firewall.
Konfigurasi server.
Jika test.html dapat dibuka tetapi Laravel tetap 403, periksa:
.htaccess.index.php.Path menuju source Laravel.
ModSecurity.
Permission folder project.
Hapus file pengujian setelah pemeriksaan selesai.
Langkah 9: Periksa Error Log
Buka cPanel, kemudian masuk ke menu:
Metrics → Errors
Anda juga dapat memeriksa file:
public_html/error_log
Untuk log Laravel, periksa:
storage/logs/laravel.log
Contoh pesan yang perlu diperhatikan:
Permission denied
client denied by server configuration
Options FollowSymLinks not allowed here
Invalid command
File not found
Jika tidak terdapat log Laravel, kemungkinan request belum berhasil mencapai aplikasi dan masih diblokir oleh web server.
Langkah 10: Uji File .htaccess
Untuk mengetahui apakah .htaccess menjadi penyebab, ubah sementara namanya:
.htaccess
menjadi:
.htaccess-backup
Setelah itu, buka kembali halaman utama.
Jika error 403 hilang atau berubah menjadi tampilan lain, masalah kemungkinan berada di dalam .htaccess.
Kembalikan nama file setelah pengujian selesai, lalu gunakan .htaccess asli dari folder public Laravel.
Tanpa aturan rewrite, halaman utama mungkin dapat dibuka, tetapi route lain dapat menghasilkan error 404.
Langkah 11: Periksa Directory Privacy
Buka menu:
cPanel → Directory Privacy
Pastikan public_html atau folder domain tidak sedang dilindungi secara tidak sengaja.
Jika terdapat perlindungan yang tidak diperlukan, nonaktifkan lalu lakukan pengujian kembali.
Langkah 12: Periksa ModSecurity
Jika cPanel menyediakan menu ModSecurity, periksa apakah domain sedang diblokir oleh aturan tertentu.
ModSecurity lebih mungkin menjadi penyebab apabila:
Hanya halaman tertentu yang menghasilkan 403.
Formulir menghasilkan 403 saat dikirim.
Request API ditolak.
Upload file gagal.
URL dengan parameter tertentu tidak dapat dibuka.
ModSecurity dapat dinonaktifkan sementara untuk pengujian jika fitur tersebut tersedia. Setelah penyebab ditemukan, aktifkan kembali dan minta penyedia hosting melakukan pengecualian pada aturan yang bermasalah.
Jangan menonaktifkan perlindungan keamanan secara permanen tanpa memahami risikonya.
Langkah 13: Bersihkan Cache Laravel
Setelah konfigurasi dan permission diperbaiki, masuk ke folder project:
cd /home/username/OVLAWEB
Kemudian jalankan:
php artisan optimize:clear
Setelah aplikasi berjalan normal pada production, jalankan:
php artisan optimize
Laravel menyediakan optimize:clear untuk menghapus cache hasil optimasi dan optimize untuk membuat cache konfigurasi, route, event, serta view pada deployment production. (Laravel)
Langkah 14: Periksa Versi PHP
Periksa versi PHP pada Terminal:
php -v
Pastikan versinya sesuai dengan kebutuhan Laravel dan dependency pada composer.json.
Pada cPanel, versi PHP domain dapat diperiksa melalui:
MultiPHP Manager
Jika versi PHP Terminal berbeda, gunakan binary PHP yang sesuai.
Contoh PHP 8.3:
/opt/cpanel/ea-php83/root/usr/bin/php artisan optimize:clear
Contoh PHP 8.4:
/opt/cpanel/ea-php84/root/usr/bin/php artisan optimize:clear
Urutan Pemeriksaan yang Disarankan
Gunakan urutan berikut untuk mempercepat pencarian masalah:
Periksa document root domain.
Pastikan
index.phptersedia.Pastikan
.htaccesstersedia.Periksa permission file dan folder.
Periksa ownership.
Periksa akses tulis
storagedanbootstrap/cache.Uji menggunakan file HTML sederhana.
Periksa error log cPanel.
Uji
.htaccess.Periksa Directory Privacy.
Periksa ModSecurity.
Bersihkan cache Laravel.
Periksa versi PHP.
Kesalahan yang Perlu Dihindari
Mengubah Semua Permission Menjadi 777
Permission 777 bukan solusi yang aman dan dapat membuka akses tulis kepada pihak yang tidak seharusnya.
Memindahkan Seluruh Project ke Public HTML
Tindakan ini dapat membuat .env, source code, dan file internal lebih berisiko terakses melalui internet.
Menghapus .htaccess Permanen
Tanpa .htaccess, route Laravel selain halaman utama dapat menghasilkan error 404.
Mengubah index.php Tanpa Backup
Kesalahan path dapat membuat aplikasi gagal menemukan vendor/autoload.php atau bootstrap/app.php.
Menonaktifkan ModSecurity Permanen
ModSecurity membantu melindungi website dari permintaan berbahaya. Nonaktifkan hanya untuk pengujian dan aktifkan kembali setelah selesai.
Mengabaikan Error Log
Error log biasanya memberikan petunjuk yang lebih jelas dibandingkan mencoba berbagai perubahan tanpa arah.
Checklist Mengatasi Error 403 Laravel
Sebelum melakukan pengujian terakhir, pastikan:
Domain mengarah ke folder
public.index.phptersedia..htaccesstersedia.Path pada
index.phpbenar.Folder menggunakan permission yang sesuai.
File menggunakan permission yang sesuai.
Ownership file benar.
storagedapat ditulis.bootstrap/cachedapat ditulis.Directory Privacy tidak aktif.
ModSecurity tidak memblokir request.
Versi PHP sesuai.
Cache Laravel sudah dibersihkan.
Error log sudah diperiksa.
Bantuan Deployment Laravel dari Ovla Media
Error 403 Forbidden pada Laravel dapat disebabkan oleh beberapa lapisan konfigurasi, mulai dari document root, permission, ownership, .htaccess, hingga sistem keamanan hosting.
Ovla Media menyediakan layanan pengembangan, deployment, perbaikan, dan pemeliharaan aplikasi Laravel.
Layanan yang dapat disesuaikan meliputi:
Deployment Laravel ke cPanel.
Deployment Laravel ke VPS.
Pengaturan document root.
Perbaikan error 403 dan 404.
Konfigurasi
.htaccess.Perbaikan permission dan ownership.
Konfigurasi file
.env.Perbaikan storage link.
Konfigurasi database.
Optimasi aplikasi production.
Migrasi hosting.
Pengembangan aplikasi bisnis custom.
Kesimpulan
Error 403 Forbidden pada Laravel di cPanel berarti web server menolak akses menuju file atau folder yang diminta.
Penyebab yang paling sering adalah document root tidak mengarah ke folder public, permission tidak sesuai, file .htaccess bermasalah, ownership berbeda, atau request diblokir oleh sistem keamanan server.
Pemeriksaan pertama yang sebaiknya dilakukan adalah memastikan domain mengarah ke:
/project-laravel/public
Jika document root tidak dapat diubah, tempatkan source Laravel di luar public_html, lalu pindahkan hanya isi folder public ke public_html.
Setelah struktur diperbaiki, periksa .htaccess, permission, ownership, folder storage, bootstrap/cache, error log, dan ModSecurity.
Hindari menggunakan permission 777 atau memindahkan seluruh source Laravel ke folder publik. Konfigurasi yang tepat akan membuat aplikasi lebih aman dan mudah dipelihara.
Artikel Terkait
Cara Menjalankan Queue Worker Laravel di cPanel Tanpa Supervisor
Queue Worker Laravel digunakan untuk memproses pekerjaan di belakang layar, seperti pengiriman email, notifikasi, pembuatan laporan, sinkronisasi API, dan pemrosesan data. Pada VPS, worker biasanya dijaga menggunakan Supervisor. Namun, pada shared hosting cPanel yang tidak menyediakan Supervisor, queue tetap dapat dijalankan menggunakan Cron Job dan perintah queue:work --stop-when-empty.
Cara Integrasi WhatsApp Cloud API dengan Laravel
WhatsApp Cloud API memungkinkan aplikasi Laravel mengirim pesan, notifikasi, dan template WhatsApp melalui layanan resmi Meta. Integrasi ini dapat digunakan untuk konfirmasi pesanan, invoice, pengingat pembayaran, customer service, hingga chatbot. Artikel ini membahas konfigurasi token, pengiriman pesan, serta penerimaan webhook menggunakan Laravel.
Cara Membuat Role dan Permission Laravel Tanpa Package
Role dan permission digunakan untuk membatasi akses pengguna berdasarkan tugas dan kewenangannya. Tanpa memasang package tambahan, Laravel dapat membuat sistem hak akses menggunakan migration, relasi Eloquent, middleware, Gate, Policy, dan Blade Directive. Artikel ini membahas pembuatan role dan permission dari awal, mulai dari struktur database, model, seeder, middleware, hingga penerapannya pada route dan tampilan.