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.

403 pada wp-admin setelah pembaruan pengaya biasanya adalah pengaya keamanan yang mengunci jalur yang disangkanya sedang diserang. Lognya akan mengatakan begitu, dan mematikannya dengan mengganti nama direktorinya adalah cara tercepat untuk memastikan.