Angka 403 berbeda dari 404 dengan cara yang berguna: server menemukan apa yang Anda minta. Lalu ada sesuatu yang berkata tidak. Itu mempersempitnya menjadi empat kemungkinan.
1. Tidak ada berkas indeks
Permintaan ke sebuah direktori yang tidak punya index.php maupun index.html, dengan pendaftaran isi direktori dimatikan, menghasilkan 403. Itu perilaku yang benar dan biasanya berarti ada penerapan yang belum tuntas.
ls -la /var/www/site/
2. Server tidak bisa membacanya
Berkas yang tak bisa dibaca oleh pengguna web akan ditolak. Periksa pemiliknya sebagaimana Anda memeriksa modenya — modenya jauh lebih sering benar daripada pemiliknya.
namei -l /var/www/site/index.php
namei menyusuri seluruh jalur dan mencetak izin pada setiap tingkat. Sebuah direktori di tengah yang tak punya bit eksekusi menghalangi segala sesuatu di bawahnya, dan justru kasus itulah yang terlewat.
3. Ada aturan yang menolaknya
grep -rn "deny\|Require all denied" /etc/nginx/sites-enabled/ .htaccess 2>/dev/null
Aturan keamanan yang menolak berdasarkan ekstensi atau direktori adalah 403 yang memang disengaja. Kalau yang tertangkap justru berkas Anda sendiri, aturannya terlalu luas.
4. Tembok api atau WAF
Kalau 403 itu datang bersama halaman yang bukan milik Anda, asalnya dari sesuatu di depan server. Log miliknya sendiri menyebut aturan mana yang cocok.