Base de connaissances · Scripts et programmes

Erreur 403 dans l'administration WordPress sur load-styles.php / load-scripts.php au chargement

Dernière mise à jour : 2025-12-10

Erreur 403 dans wp-admin de WordPress sur load-styles.php / load-scripts.php (Wordfence WAF / auto_prepend_file)

Résumé

Après une mise à jour de WordPress ou d'une extension, certains sites affichent soudainement un écran wp-admin défaillant :

  • La connexion fonctionne, mais le tableau de bord d'administration s'affiche sans mise en forme, vide ou partiellement chargé.
  • Dans les outils de développement du navigateur → Réseau, on constate 403 Forbidden pour :
    • wp-admin/load-styles.php
    • wp-admin/load-scripts.php
  • Désactiver les extensions depuis wp-admin, ou même renommer wp-content/plugins, ne pas corrige pas l'erreur 403.

Dans de nombreux cas, la cause fondamentale est le pare-feu applicatif Web Wordfence (WAF) est toujours chargé via auto_prepend_file dans .htaccess et/ou .user.ini, même après la désactivation de l'extension.

 

Symptômes

  • L'interface d'administration WordPress se charge partiellement ou sans CSS/JS.
  • In your browser’s DevTools → Network tab:
    • wp-admin/load-styles.php et/ou wp-admin/load-scripts.php affichent 403 Forbidden.
  • Le journal d'erreurs Apache affiche des lignes similaires à :
    [authz_core:error] AH01630: client denied by server configuration: /home/USER/public_html/wp-admin/load-styles.php
    [authz_core:error] AH01630: client denied by server configuration: /home/USER/public_html/wp-admin/load-scripts.php
  • Renommer wp-content/plugins ou désactiver les extensions depuis le tableau de bord ne permet pas pas de résoudre l'erreur.

 

Cause première

Lorsque le pare-feu Wordfence WAF est activé en mode Extended Protection il ne s'agit pas d'une simple extension WordPress classique. Il s'injecte également dans PHP via auto_prepend_file.

Plus précisément, Wordfence :

  1. Ajoute une directive auto_prepend_file à votre configuration PHP via :
    • .htaccess (Apache)
    • .user.ini (paramètres PHP par répertoire)
  2. Fait pointer cette directive vers un fichier d'amorçage tel que :
    # In .htaccess
    php_value auto_prepend_file /home/USER/public_html/wordfence-waf.php
    
    ; In .user.ini
    auto_prepend_file = "/home/USER/public_html/wordfence-waf.php"
    

Cela force chaque requête PHP (frontend, wp-admin, AJAX, cron, etc.) à charger wordfence-waf.php avant le WordPress. Même si vous désactivez ou supprimez l'extension Wordfence, l'amorçage du WAF peut tout de même :

  • Bloquer certains chemins (par ex. load-styles.php, load-scripts.php, wp-cron.php), ou
  • Échouer en raison d'un code obsolète ou incompatible après une mise à niveau de WordPress ou de PHP.

Comme cela s'exécute au niveau de PHP / Apache, il ne suffit pas de désactiver l'extension dans wp-admin.

 

Comment confirmer que Wordfence / auto_prepend_file est en cause

1. Check Apache / PHP error logs

Look in your virtual host or global Apache error log for lines like:

[authz_core:error] AH01630: client denied by server configuration: /home/USER/public_html/wp-admin/load-styles.php
[authz_core:error] AH01630: client denied by server configuration: /home/USER/public_html/wp-admin/load-scripts.php

Si vous constatez des erreurs 403 sur ces points de terminaison du cœur de WordPress et que la désactivation habituelle des extensions n’y change rien, soupçonnez le WAF / auto_prepend_file.


2. Vérifier .user.ini dans le document root

  1. Via SSH ou le gestionnaire de fichiers, accédez à la racine de votre site (root) (par exemple /home/USER/public_html).
  2. Ouvrez .user.ini et recherchez une ligne similaire à :
    auto_prepend_file = "/home/USER/public_html/wordfence-waf.php"


3. Vérifier .htaccess pour le WAF de Wordfence

  1. Dans le même répertoire, ouvrez .htaccess.
  2. Recherchez un bloc du WAF de Wordfence, par exemple :
    # Wordfence WAF
    # <IfModule mod_php7.c>
    php_value auto_prepend_file /home/USER/public_html/wordfence-waf.php
    # </IfModule>

If these exist, Wordfence WAF is still being injected into every PHP request, even if the plugin is deactivated.

 

Solution : désinstaller correctement le WAF de Wordfence

Avertissement : Only do this if you intend to disable Wordfence WAF. If you still want Wordfence, use its own UI to reconfigure Extended Protection.


Step 1: Disable Wordfence plugin (if possible)

  1. Connectez-vous à wp-admin.
  2. Accédez à Extensions → Extensions installées.
  3. Désactiver Wordfence Security.

Si wp-admin est totalement inaccessible, vous pouvez ignorer cette étape et passer directement à la modification des fichiers.

Étape 2 : supprimer auto_prepend_file de .user.ini

  1. Dans le document root de votre site WordPress, ouvrez .user.ini.
  2. Repérez la ligne de Wordfence :
    auto_prepend_file = "/home/USER/public_html/wordfence-waf.php"
  3. Commentez-la ou supprimez-la, par exemple :
    ; auto_prepend_file = "/home/USER/public_html/wordfence-waf.php"
  4. Enregistrez le fichier.

Étape 3 : Supprimer auto_prepend_file de .htaccess

  1. Dans le même répertoire, ouvrez .htaccess.
  2. Recherchez le bloc du pare-feu Wordfence WAF, par exemple :
    # Wordfence WAF
    <IfModule mod_php7.c>
        php_value auto_prepend_file /home/USER/public_html/wordfence-waf.php
    </IfModule>
  3. Mettez-le en commentaire ou supprimez-le :
    # Wordfence WAF disabled
    # <IfModule mod_php7.c>
    #     php_value auto_prepend_file /home/USER/public_html/wordfence-waf.php
    # </IfModule>
  4. Enregistrez le fichier.

Étape 4 : Vider le cache opcode / redémarrer PHP (facultatif mais recommandé)

  • Si vous utilisez PHP-FPM / LSAPI / FastCGI, redémarrez PHP-FPM ou LiteSpeed / Apache.
  • Vous pouvez également demander à votre hébergeur de vider le cache opcache PHP pour ce compte.

Étape 5 : Tester wp-admin

  1. Ouvrez /wp-admin/ dans votre navigateur.
  2. Ouvrez les DevTools → Réseau, puis rechargez la page.
  3. Vérifiez :
    • wp-admin/load-styles.php renvoie 200 OK.
    • wp-admin/load-scripts.php renvoie 200 OK.
    • The admin interface looks normal again (CSS/JS loaded).

Si vous avez précédemment ajouté des règles de substitution temporaires (par exemple un wp-admin/.htaccess autorisant sans condition ces fichiers), vous pouvez les supprimer une fois que tout fonctionne normalement.

 

Facultatif : nettoyer les fichiers de Wordfence

If you are completely done with Wordfence, you can also:

  • Supprimer ou renommer :
    • wp-content/plugins/wordfence/
    • wp-content/wflogs/ (répertoire des journaux)
  • Supprimer wordfence-waf.php from your document root if it is no longer referenced anywhere.

Preventing Future Issues

  • Be aware that security plugins with WAF / “Extended Protection” can modify:
    • .htaccess
    • .user.ini
    • Le comportement global de PHP via auto_prepend_file
  • Disabling the plugin from the dashboard does pas supprimez automatiquement ces hooks de bas niveau.
  • Si vous constatez des erreurs 403 inhabituelles ou le message “client denied by server configuration” sur des fichiers essentiels de WordPress tels que load-styles.php, load-scripts.phpou wp-cron.php, vérifiez toujours la présence de :
    • auto_prepend_file lignes dans .user.ini et .htaccess.
    • Fichiers d'amorçage du WAF résiduels, tels que wordfence-waf.php.

Résumé

Problème : Administration WordPress inaccessible, load-styles.php / load-scripts.php renvoyant une erreur 403, même après la désactivation des extensions.

Cause : Le WAF de Wordfence est toujours injecté via auto_prepend_file dans .htaccess / .user.ini, chargeant wordfence-waf.php à chaque requête et bloquant ces points d'accès.

Solution :

  1. Désactivez l'extension Wordfence (si possible).
  2. Supprimer auto_prepend_file références à wordfence-waf.php de .htaccess et .user.ini.
  3. Rechargez PHP / Apache et testez de nouveau wp-admin — les erreurs 403 sur load-styles.php / load-scripts.php devraient disparaître.

← Tous les articles de la base de connaissances

Tell us what you need

Compare available plans or describe your workload so we can discuss a suitable starting point.