Un 403 differisce da un 404 in un modo utile: il server ha trovato quello che chiedevi. Poi qualcosa ha detto di no. E questo restringe il campo a quattro cose.

1. Non c'è un file indice

Una richiesta a una cartella senza index.php né index.html, con l'elenco delle cartelle disattivato, dà 403. È il comportamento giusto e di solito significa che una pubblicazione non è arrivata in fondo.

ls -la /var/www/site/

2. Il server non riesce a leggerlo

Un file che l'utente del server web non può leggere viene rifiutato. Controlla il proprietario oltre ai permessi: i permessi sono giusti molto più spesso di quanto lo sia il proprietario.

namei -l /var/www/site/index.php

namei percorre l'intero percorso e stampa i permessi a ogni livello. Una cartella a metà strada senza il bit di esecuzione blocca tutto ciò che sta sotto, ed è proprio il caso che sfugge.

3. Una regola lo sta negando

grep -rn "deny\|Require all denied" /etc/nginx/sites-enabled/ .htaccess 2>/dev/null

Le regole di sicurezza che negano per estensione o per cartella sono il 403 voluto. Se a finire nella rete è un tuo file, la regola è troppo larga.

4. Un firewall o un WAF

Se il 403 arriva con una pagina che non è la tua, viene da qualcosa che sta davanti al server. È il suo stesso registro a nominare la regola che ha risposto.

Un 403 su wp-admin dopo l'aggiornamento di un plugin è quasi sempre un plugin di sicurezza che blocca un percorso che crede sotto attacco. Il suo registro lo dirà, e disattivarlo rinominandone la cartella è il modo più rapido per confermarlo.