Base de conocimientos · Scripts y programas

El panel de administración de WordPress no funciona: error 403 al cargar load-styles.php / load-scripts.php

Última actualización: 2025-12-10

Error 403 en wp-admin de WordPress en load-styles.php / load-scripts.php (Wordfence WAF / auto_prepend_file)

Resumen

Tras una actualización de WordPress o de un complemento, algunos sitios muestran de repente una pantalla de wp-admin dañada:

  • El inicio de sesión funciona, pero el panel de administración aparece sin estilos, en blanco o cargado a medias.
  • Las herramientas para desarrolladores del navegador → Red muestran 403 Forbidden para:
    • wp-admin/load-styles.php
    • wp-admin/load-scripts.php
  • Deshabilitar los complementos desde wp-admin, o incluso cambiar el nombre de wp-content/plugins, no no soluciona el error 403.

En muchos casos, la causa root es el firewall de aplicaciones web de Wordfence (WAF) se sigue cargando mediante auto_prepend_file en .htaccess y/o .user.ini, incluso después de deshabilitar el complemento.

 

Síntomas

  • El administrador de WordPress se carga parcialmente o sin CSS/JS.
  • En la pestaña Red de las herramientas para desarrolladores de su navegador →:
    • wp-admin/load-styles.php y/o wp-admin/load-scripts.php muestran 403 Forbidden.
  • El registro de errores de Apache muestra líneas similares a:
    [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
  • Cambiar el nombre de wp-content/plugins o desactivar los plugins desde el panel de control no no soluciona el error.

 

Causa raíz

Cuando Wordfence WAF está activado en modo Extended Protection no se comporta como un plugin normal de WordPress. Además, se inyecta en PHP mediante auto_prepend_file.

En concreto, Wordfence:

  1. Añade una auto_prepend_file directiva a la configuración de PHP mediante:
    • .htaccess (Apache)
    • .user.ini (configuración de PHP por directorio)
  2. Hace que esa directiva apunte a un archivo de arranque como:
    # 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"
    

Esto obliga a que cada solicitud PHP (frontend, wp-admin, AJAX, cron, etc.) cargue wordfence-waf.php antes del WordPress. Incluso si desactiva o elimina el plugin Wordfence, el arranque del WAF puede seguir:

  • Bloqueando rutas específicas (p. ej. load-styles.php, load-scripts.php, wp-cron.php), o
  • Fallando por código obsoleto o incompatible tras una actualización de WordPress o PHP.

Dado que esto se ejecuta a nivel de PHP / Apache, no basta con desactivar el plugin en wp-admin.

 

Cómo confirmar que se trata de Wordfence / auto_prepend_file

1. Revise los registros de errores de Apache / PHP

Busque en el registro de errores de su host virtual o en el registro global de errores de Apache líneas como las siguientes:

[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 observa errores 403 en estos endpoints principales de WordPress y desactivar los plugins de la forma habitual no soluciona el problema, sospeche de WAF / auto_prepend_file.


2. Revise .user.ini en el document root

  1. Mediante SSH o el administrador de archivos, diríjase al directorio root de su sitio (por ejemplo /home/USER/public_html).
  2. Abra .user.ini y busque una línea similar a esta:
    auto_prepend_file = "/home/USER/public_html/wordfence-waf.php"


3. Revise .htaccess para Wordfence WAF

  1. En el mismo directorio, abra .htaccess.
  2. Busque un bloque de Wordfence WAF, por ejemplo:
    # Wordfence WAF
    # <IfModule mod_php7.c>
    php_value auto_prepend_file /home/USER/public_html/wordfence-waf.php
    # </IfModule>

Si existen, Wordfence WAF se sigue inyectando en cada solicitud PHP, incluso aunque el plugin esté desactivado.

 

Solución: desinstalar correctamente Wordfence WAF

Advertencia: Haga esto solo si desea desactivar Wordfence WAF. Si aún desea utilizar Wordfence, emplee su propia interfaz para reconfigurar la protección extendida.


Paso 1: desactive el plugin Wordfence (si es posible)

  1. Inicie sesión en wp-admin.
  2. Vaya a Plugins → Plugins instalados.
  3. Desactivar Wordfence Security.

Si wp-admin no funciona en absoluto, puede omitir este paso y pasar directamente a la edición de los archivos.

Paso 2: elimine auto_prepend_file de .user.ini

  1. En el document root de su sitio WordPress, abra .user.ini.
  2. Busque la línea de Wordfence:
    auto_prepend_file = "/home/USER/public_html/wordfence-waf.php"
  3. Coméntela o elimínela, por ejemplo:
    ; auto_prepend_file = "/home/USER/public_html/wordfence-waf.php"
  4. Guarde el archivo.

Paso 3: Eliminar auto_prepend_file de .htaccess

  1. En el mismo directorio, abra .htaccess.
  2. Busque el bloque del WAF de Wordfence, por ejemplo:
    # Wordfence WAF
    <IfModule mod_php7.c>
        php_value auto_prepend_file /home/USER/public_html/wordfence-waf.php
    </IfModule>
  3. Coméntelo o elimínelo:
    # Wordfence WAF disabled
    # <IfModule mod_php7.c>
    #     php_value auto_prepend_file /home/USER/public_html/wordfence-waf.php
    # </IfModule>
  4. Guarde el archivo.

Paso 4: Borrar la caché de opcode / reiniciar PHP (opcional, pero recomendable)

  • Si utiliza PHP-FPM / LSAPI / FastCGI, reinicie PHP-FPM o LiteSpeed / Apache.
  • También puede solicitar a su proveedor de hosting que borre la opcache de PHP de esa cuenta.

Paso 5: Probar wp-admin

  1. Abra /wp-admin/ en su navegador.
  2. Abra DevTools → Network y, a continuación, recargue la página.
  3. Compruebe que:
    • wp-admin/load-styles.php devuelve 200 OK.
    • wp-admin/load-scripts.php devuelve 200 OK.
    • La interfaz de administración vuelve a verse con normalidad (CSS/JS cargados).

Si anteriormente añadió alguna regla de anulación temporal (por ejemplo, un wp-admin/.htaccess que permitía incondicionalmente esos archivos), puede eliminarla cuando todo funcione con normalidad.

 

Opcional: limpieza de los archivos de Wordfence

Si ya no va a utilizar Wordfence en absoluto, también puede:

  • Eliminar o renombrar:
    • wp-content/plugins/wordfence/
    • wp-content/wflogs/ (directorio de registros)
  • Eliminar wordfence-waf.php de su document root si ya no se hace referencia a él en ningún lugar.

Cómo evitar problemas en el futuro

  • Tenga en cuenta que los plugins de seguridad con WAF / “Protección extendida” pueden modificar:
    • .htaccess
    • .user.ini
    • El comportamiento global de PHP mediante auto_prepend_file
  • Desactivar el plugin desde el panel de control no no eliminan automáticamente estos ganchos de bajo nivel.
  • Si observa errores 403 extraños o el mensaje “client denied by server configuration” en archivos principales de WordPress como load-styles.php, load-scripts.php, o wp-cron.php, compruebe siempre si hay:
    • auto_prepend_file líneas en .user.ini como la .htaccess.
    • Archivos de arranque del WAF sobrantes, como wordfence-waf.php.

Resumen

Problema: El panel de administración de WordPress no funciona: load-styles.php / load-scripts.php devuelve un error 403, incluso después de desactivar los plugins.

Causa: El WAF de Wordfence sigue inyectándose a través de auto_prepend_file en .htaccess / .user.ini, cargando wordfence-waf.php en cada solicitud y bloqueando esos endpoints.

Solución:

  1. Desactive el plugin Wordfence (si es posible).
  2. Eliminar auto_prepend_file referencias a wordfence-waf.php de .htaccess como la .user.ini.
  3. Recargue PHP / Apache y vuelva a probar wp-admin — los errores 403 en load-styles.php / load-scripts.php deberían desaparecer.

← Todos los artículos de base de conocimientos

Tell us what you need

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