15%

Ahorra 15%<\/span> en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código:

Skills
Comenzar
23.10.2024

8 Formas de Solucionar un Error 403 Forbidden en Tu Sitio Web

Un error 403 Forbidden es un código de estado HTTP devuelto por un servidor web cuando entiende la solicitud del cliente pero se niega activamente a procesarla debido a permisos insuficientes. A diferencia de un 404 (recurso no encontrado), un 403 confirma que el recurso existe — el servidor simplemente no permite el acceso a él. Esta distinción es muy importante al diagnosticar la causa raíz.

El error puede originarse en una docena de capas diferentes: permisos del sistema de archivos, directivas .htaccess, bloques de configuración a nivel de servidor, reglas de denegación de IP, políticas de CDN o WAF, o incluso un plugin de WordPress que funciona mal. Esta guía recorre cada solución significativa en orden de probabilidad, con comandos exactos, fragmentos de configuración y los casos extremos que la mayoría de los tutoriales omiten por completo.

Qué provoca un error 403 Forbidden

Antes de aplicar cualquier solución, es útil entender el árbol de decisiones que sigue un servidor web. Cuando Apache o NGINX recibe una solicitud, evalúa:

  1. Permisos del sistema de archivos — ¿tiene el usuario del proceso del servidor acceso de lectura al archivo?
  2. Propiedad — ¿es el archivo propiedad del usuario correcto (normalmente www-data, apache o nginx)?
  3. Directivas de configuración del servidor — ¿los bloques <Directory>, <Location> o server {} deniegan explícitamente el acceso?
  4. Reglas .htaccess — ¿hay directivas Deny, Require o Options que anulan los valores predeterminados?
  5. Reglas a nivel de aplicación — ¿un plugin de CMS, WAF o módulo de seguridad intercepta la solicitud?
  6. Bloqueos a nivel de IP — ¿está la dirección IP solicitante en una lista de denegación?

Identificar qué capa es la responsable reduce a la mitad el tiempo de resolución de problemas.

Solución 1: Corregir los permisos de archivos y directorios

Los permisos UNIX incorrectos son la causa más común de errores 403 en entornos de hosting compartido y VPS. El proceso del servidor web debe tener al menos permiso de lectura (r) en los archivos y permiso de lectura + ejecución (rx) en cada directorio de la ruta al recurso solicitado.

Valores de permisos estándar:

Tipo de recursoOctalSimbólicoSignificado
Archivos regulares644-rw-r--r--Propietario: lectura/escritura; Grupo/Otros: lectura
Archivos PHP/script644-rw-r--r--Nunca 755 a menos que sea explícitamente necesario
Directorios755drwxr-xr-xPropietario: completo; Grupo/Otros: lectura+ejecución
Archivos de configuración sensibles600-rw-------Solo propietario
WordPress wp-config.php640-rw-r-----Propietario + lectura de grupo; sin acceso mundial

Caso extremo crítico: Si algún directorio padre en la ruta carece del permiso de ejecución (x) para el usuario del servidor, todos los archivos dentro de él devolverán 403 — incluso si el archivo en sí tiene los permisos correctos. Audite siempre la ruta completa, no solo el archivo de destino.

Para corregir los permisos de forma recursiva mediante SSH:

# Fix directory permissions
find /var/www/html -type d -exec chmod 755 {} ;

# Fix file permissions
find /var/www/html -type f -exec chmod 644 {} ;

# Fix ownership (replace www-data with your server user)
chown -R www-data:www-data /var/www/html

Para comprobar el usuario efectivo con el que se ejecuta su servidor web:

ps aux | grep -E 'apache|nginx|httpd' | grep -v grep | awk '{print $1}' | sort -u

Si tiene un plan de VPS Hosting con acceso root, puede ejecutar estos comandos directamente. En hosting compartido, use el Administrador de archivos de su panel de control o un cliente FTP como FileZilla, haga clic derecho en el archivo o directorio y seleccione “Cambiar permisos”.

Solución 2: Diagnosticar y reparar el archivo .htaccess

Apache lee los archivos .htaccess en cada nivel de directorio desde la raíz web hasta el recurso solicitado. Una sola directiva mal formada — o una directiva insertada por un plugin de seguridad — puede bloquear el acceso a toda una sección de su sitio.

Paso 1: Determinar si .htaccess es la causa

Renombre el archivo para desactivarlo temporalmente:

mv /var/www/html/.htaccess /var/www/html/.htaccess.bak

Recargue la página. Si el error 403 desaparece, el archivo .htaccess es el culpable.

Paso 2: Identificar la directiva problemática

Directivas .htaccess comunes que causan errores 403:

# Overly broad IP deny rule
Deny from all

# Missing Allow directive paired with Deny
Order deny,allow
Deny from all
# (Allow from all is absent)

# Incorrect Options directive
Options -Indexes -ExecCGI
# This is fine, but the following blocks everything:
Options None

# Require directive blocking all (Apache 2.4+)
Require all denied

Paso 3: Generar un .htaccess limpio para WordPress

Navegue a Ajustes > Enlaces permanentes en el panel de WordPress y haga clic en Guardar cambios sin modificar nada. WordPress regenerará un .htaccess válido. El .htaccess estándar de WordPress tiene este aspecto:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Paso 4: Verificar AllowOverride en la configuración principal del servidor

Si AllowOverride None está configurado en httpd.conf o en un bloque de host virtual, Apache ignora los archivos .htaccess por completo — pero algunas directivas pueden seguir aplicándose desde la configuración principal y entrar en conflicto con el comportamiento esperado.

grep -r "AllowOverride" /etc/apache2/

Para que .htaccess funcione, necesita como mínimo:

<Directory /var/www/html>
    AllowOverride All
</Directory>

Solución 3: Desactivar plugins y temas de WordPress

Los plugins de seguridad (Wordfence, iThemes Security, Sucuri) frecuentemente añaden reglas de bloqueo basadas en IP, directivas mod_security o entradas .htaccess personalizadas que producen errores 403 — a veces bloqueando al propio propietario del sitio.

Desactivar todos los plugins en bloque mediante FTP o SSH:

mv /var/www/html/wp-content/plugins /var/www/html/wp-content/plugins_disabled

Si el error desaparece, reactive los plugins uno a uno renombrando la carpeta de vuelta, luego mueva los directorios de plugins individuales hacia fuera y hacia dentro hasta identificar al culpable.

Los errores 403 específicos del tema son menos comunes, pero ocurren cuando el functions.php de un tema se engancha al manejo de solicitudes o cuando un tema impone requisitos de inicio de sesión en páginas específicas. Para probar, cambie a un tema predeterminado de WordPress (Twenty Twenty-Four) mediante phpMyAdmin si no puede acceder al panel:

UPDATE wp_options SET option_value = 'twentytwentyfour' WHERE option_name = 'template';
UPDATE wp_options SET option_value = 'twentytwentyfour' WHERE option_name = 'stylesheet';

Solución 4: Limpiar la caché del navegador y las cookies

Los navegadores almacenan en caché de forma agresiva las respuestas HTTP, incluidas las respuestas de error. Un 403 servido una vez puede almacenarse en caché y reproducirse incluso después de que el problema subyacente se haya resuelto. Esto es especialmente cierto cuando un CDN o proxy inverso (Cloudflare, Varnish) se encuentra frente a su servidor.

Solución a nivel de navegador:

Abra las herramientas de desarrollo de su navegador (F12), navegue a la pestaña Red, haga clic derecho en la solicitud fallida y seleccione Limpiar caché del navegador — o use una actualización forzada:

  • Windows/Linux: Ctrl + Shift + R
  • macOS: Cmd + Shift + R

Solución a nivel de CDN/proxy:

Si usa Cloudflare, purgue la caché de la URL específica desde el panel de Cloudflare en Caching > Cache Purge > Custom Purge.

Matiz importante: Si el 403 lo está sirviendo Cloudflare (verá “Error 1020” o una página de error con la marca de Cloudflare), el bloqueo se aplica en la capa CDN mediante una Regla de Firewall o un bloqueo por reputación de IP — no por su servidor de origen. Corregir los permisos del servidor no tendrá ningún efecto en este escenario. Consulte el registro de Seguridad > Eventos de Cloudflare para confirmarlo.

Solución 5: Revisar las reglas de denegación de IP y los bloqueos de firewall

Los errores 403 basados en IP son comunes cuando los plugins de seguridad, fail2ban, o las reglas iptables manuales bloquean una dirección IP legítima — incluida la suya propia.

En cPanel (Bloqueador de IP):

  1. Inicie sesión en cPanel.
  2. Navegue a Seguridad > Bloqueador de IP.
  3. Revise la lista de IP bloqueadas y elimine las entradas que no deberían estar ahí.

En .htaccess o httpd.conf de Apache:

# Apache 2.2 syntax
Order deny,allow
Deny from 203.0.113.45

# Apache 2.4 syntax
<RequireAll>
    Require all granted
    Require not ip 203.0.113.45
</RequireAll>

Mediante fail2ban (común en entornos VPS):

# List all jails
fail2ban-client status

# Check if your IP is banned in the apache-auth jail
fail2ban-client status apache-auth

# Unban an IP address
fail2ban-client set apache-auth unbanip 203.0.113.45

Mediante iptables:

# List rules with line numbers
iptables -L INPUT -n --line-numbers

# Remove a specific DROP rule (replace 5 with the actual line number)
iptables -D INPUT 5

En un Servidor Dedicado donde controla toda la pila de red, verifique siempre tanto las reglas de firewall a nivel de aplicación como las de nivel de kernel antes de concluir que el problema está en la configuración de su servidor web.

Solución 6: Deshabilitar o reconfigurar la protección contra hotlinking

La protección contra hotlinking funciona inspeccionando la cabecera HTTP Referer. Si llega una solicitud con un Referer que no está en la lista aprobada, el servidor devuelve 403. Este mecanismo puede fallar en varios escenarios:

  • Acceso directo por URL — algunas configuraciones bloquean solicitudes sin cabecera Referer, que es el caso de usuarios que escriben la URL directamente, hacen clic en enlaces de clientes de correo electrónico o usan navegadores centrados en la privacidad que eliminan las cabeceras de referencia.
  • Transiciones de HTTPS a HTTP — los navegadores no envían una cabecera Referer al navegar desde una página HTTPS a un recurso HTTP, lo que hace que la protección contra hotlinking bloquee la solicitud.
  • Acceso mediante API o scripts — las solicitudes programáticas a menudo omiten por completo la cabecera Referer.

En cPanel (Protección contra Hotlinking):

  1. Navegue a Seguridad > Protección contra Hotlinking.
  2. Asegúrese de que su dominio (tanto en variantes http:// como https://) esté en la lista URLs a las que permitir acceso.
  3. Si está realizando pruebas, haga clic temporalmente en Deshabilitar y confirme si el 403 se resuelve.

Directamente en .htaccess:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www.)?yourdomain.com/ [NC]
RewriteRule .(jpg|jpeg|png|gif|webp|svg)$ - [F,L]

Para permitir el acceso directo (Referer vacío), elimine la línea RewriteCond %{HTTP_REFERER} !^$.

Solución 7: Corregir la configuración del servidor Apache o NGINX

Cuando controla el servidor — como lo haría en un VPS con cPanel o una instancia dedicada de metal desnudo — las directivas de host virtual o bloque de servidor mal configuradas son una fuente frecuente de errores 403.

Configuración de Apache

Configuración incorrecta común — falta Require all granted:

En Apache 2.4, el modelo de autorización cambió significativamente. La antigua directiva Allow from all está obsoleta. Sin una declaración Require explícita, Apache deniega el acceso de forma predeterminada.

<VirtualHost *:80>
    ServerName yourdomain.com
    DocumentRoot /var/www/html

    <Directory /var/www/html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

Compruebe Options -Indexes: Esta directiva impide el listado de directorios (devolviendo 403 cuando no existe ningún archivo de índice). Si un directorio no tiene index.html ni index.php, Apache devuelve 403. Este es un comportamiento de seguridad intencional — pero si espera un listado de directorio, añada Options +Indexes.

Verifique su configuración y reinicie:

apachectl configtest
systemctl reload apache2

Configuración de NGINX

Configuración incorrecta común — ruta root incorrecta o índice faltante:

server {
    listen 80;
    server_name yourdomain.com;
    root /var/www/html;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }
}

Si la directiva root apunta a una ruta que no existe o que el usuario del proceso nginx no puede leer, cada solicitud devuelve 403.

Compruebe los registros de error de NGINX para conocer la causa exacta:

tail -n 50 /var/log/nginx/error.log

Un 403 de NGINX casi siempre produce una entrada de registro como:

2024/01/15 10:23:45 [error] 1234#0: *1 "/var/www/html/index.html" is forbidden (13: Permission denied)

El código de error 13 significa Permiso denegado a nivel del sistema operativo — vuelva a la Solución 1 y audite los permisos del sistema de archivos y la propiedad.

Pruebe y recargue NGINX:

nginx -t
systemctl reload nginx

Comparación de resolución de problemas 403: Apache vs. NGINX

FactorApacheNGINX
Archivo de configuración por directorio.htaccess (si AllowOverride All)No compatible; configuración solo en bloque de servidor
Modelo de acceso predeterminado (v2.4+)Denegar a menos que Require all grantedDenegar si la ruta root no es legible o no existe
Listado de directoriosOptions +Indexes para habilitarautoindex on; para habilitar
Sintaxis de bloqueo de IPRequire not ip x.x.x.xdeny x.x.x.x; en location {}
Comando de prueba de configuraciónapachectl configtestnginx -t
Comando de recargasystemctl reload apache2systemctl reload nginx
Ubicación del registro/var/log/apache2/error.log/var/log/nginx/error.log
Equivalente a .htaccessSoporte nativoRequiere conversión a directivas nginx.conf

Solución 8: Auditar el certificado SSL y la configuración de redirección HTTPS

Esta solución está ausente en la mayoría de las guías sobre 403, pero es una causa genuina y frecuentemente pasada por alto. Las reglas de redirección SSL mal configuradas pueden producir errores 403 en escenarios específicos.

Escenario 1: Forzar HTTPS antes de que el certificado sea válido

Si una redirección .htaccess fuerza todo el tráfico a HTTPS pero el certificado SSL aún no está aprovisionado o ha expirado, algunas configuraciones de servidor devuelven 403 en lugar de un error de certificado.

# Problematic if SSL is not configured on the server
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Verifique que su certificado esté activo y correctamente instalado antes de aplicar redirecciones HTTPS.

Escenario 2: Requisito de certificado de cliente mod_ssl

Si su configuración de Apache requiere certificados SSL del lado del cliente para la autenticación y el navegador no presenta ninguno, Apache devuelve 403:

<Directory /var/www/secure>
    SSLVerifyClient require
    SSLVerifyDepth 1
</Directory>

A menos que haya implementado intencionalmente TLS mutuo (mTLS), elimínelo o establezca SSLVerifyClient none.

Escenario 3: Precarga HSTS con cadena de redirección incorrecta

Un bucle de redirección causado por cabeceras HSTS en conflicto y reglas HTTP a HTTPS puede manifestarse como un 403 en ciertas combinaciones de navegador/proxy. Inspeccione la cadena de redirección completa con:

curl -I -L --max-redirs 10 http://yourdomain.com

Diagnóstico sistemático: Lectura de sus registros de error

Cada solución anterior debe ir acompañada de monitorización de registros en tiempo real. Adivinar sin leer los registros es una pérdida de tiempo.

Apache — monitorizar el registro de errores en tiempo real:

tail -f /var/log/apache2/error.log | grep 403

NGINX — monitorizar el registro de errores en tiempo real:

tail -f /var/log/nginx/error.log | grep 403

Entornos cPanel — acceder a los registros mediante:

tail -f /usr/local/apache/logs/error_log

La entrada del registro casi siempre le indicará exactamente qué archivo provocó el 403 y por qué — permiso denegado, índice faltante o una regla de denegación explícita.

Matriz de decisión: Elegir la solución correcta

Use esta matriz para identificar la solución más probable según sus síntomas:

SíntomaCausa más probableSolución principal
403 en todas las páginas tras la migraciónLa propiedad del archivo cambió durante la transferenciaSolución 1 — chown y chmod de forma recursiva
403 tras instalar un plugin de WordPressEl plugin añadió reglas .htaccessSolución 2 + Solución 3
403 solo en archivos de imagen o multimediaProtección contra hotlinking mal configuradaSolución 6
403 tras cambiar su IPRegla de denegación de IP apuntando a la IP antiguaSolución 5
403 en un VPS nuevo sin CMSApache 2.4 sin Require all grantedSolución 7
403 tras habilitar SSLRedirección HTTPS o configuración incorrecta de mod_sslSolución 8
403 solo en un navegadorRespuesta de error almacenada en cachéSolución 4
403 desde la página de error de CloudflareRegla de Firewall CDN o bloqueo por reputación de IPSolución 4 (purga CDN) + panel de Cloudflare
403 en URL de directorio, no en archivosSin archivo de índice + Options -IndexesSolución 7 — añadir archivo de índice o habilitar +Indexes

Conclusiones técnicas clave

  • Lea siempre el registro de errores del servidor primero — identifica el archivo exacto y el motivo del 403 en segundos.
  • En Apache 2.4+, Require all granted es obligatorio en cada bloque <Directory>. Omitirlo es la causa más común de 403 en configuraciones de servidor nuevas.
  • Los permisos de archivo por sí solos son insuficientes — la propiedad debe coincidir con el usuario del proceso del servidor web (www-data, apache, nginx).
  • Un 403 servido por un CDN (Cloudflare, Fastly) es completamente diferente de un 403 servido por su servidor de origen. Corregir uno no tiene ningún efecto sobre el otro.
  • En sitios WordPress, pruebe siempre con los plugins desactivados en bloque antes de dedicar tiempo al diagnóstico a nivel de servidor.
  • Si gestiona su propia infraestructura en un VPS o Servidor Dedicado, mantenga en el ámbito los registros fail2ban y las reglas iptables — operan por debajo de la capa del servidor web y son invisibles para las herramientas de depuración a nivel de aplicación.
  • Las reglas de protección contra hotlinking que bloquean cabeceras Referer vacías afectarán a usuarios legítimos en navegadores centrados en la privacidad y a clics en enlaces de correo electrónico — incluya siempre una excepción para referentes en blanco.

Preguntas frecuentes

¿Cuál es la diferencia entre un error 403 Forbidden y un error 401 Unauthorized?

Un error 401 Unauthorized significa que el servidor requiere autenticación y el cliente no ha proporcionado credenciales válidas — volver a autenticarse puede resolverlo. Un 403 Forbidden significa que el servidor ha identificado quién es usted (o no requiere autenticación) pero rechaza explícitamente el acceso independientemente. Proporcionar credenciales no ayudará con un 403.

¿Puede un error 403 afectar al posicionamiento SEO de mi sitio web?

Sí. Si Googlebot recibe un 403 al rastrear una página, no puede indexarla. Los errores 403 persistentes en URLs importantes harán que desaparezcan de los resultados de búsqueda. Use la herramienta de Inspección de URL de Google Search Console para comprobar si Googlebot puede acceder a sus páginas, y monitorice el informe de Cobertura para detectar errores de rastreo relacionados con 403.

¿Por qué obtengo un error 403 solo en tipos de archivo específicos (imágenes, PDFs)?

Esto casi siempre apunta a la protección contra hotlinking (Solución 6) o a una regla específica de tipo MIME en .htaccess. Compruebe si hay directivas FilesMatch o RewriteRule que apunten a extensiones específicas. Verifique también que el directorio que contiene esos archivos tenga permisos 755 y sea propiedad del usuario de servidor correcto.

¿Cómo puedo corregir un error 403 si no tengo acceso SSH o FTP?

Use el Administrador de archivos basado en web de su proveedor de hosting (disponible en cPanel, Plesk o DirectAdmin) para inspeccionar y modificar los permisos de archivos y los archivos .htaccess. Para problemas específicos de WordPress, la herramienta WP-CLI (si está disponible a través del terminal de su panel de control) o el acceso directo a la base de datos mediante phpMyAdmin pueden ayudar a desactivar plugins y cambiar temas sin SSH.

¿Un error 403 significa que mi sitio web ha sido hackeado?

No necesariamente, pero puede ser un síntoma. El malware a veces inyecta reglas de denegación en archivos .htaccess o modifica los permisos de archivos para impedir el acceso. Si no puede identificar una causa basada en la configuración para el 403, analice sus archivos en busca de modificaciones no autorizadas usando una herramienta como rkhunter, Wordfence (si puede acceder a WordPress) o el escáner de malware de su proveedor de hosting. Compare los hashes de archivos con copias de seguridad conocidas como válidas si están disponibles.

15%

Ahorra 15%<\/span> en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código:

Skills
Comenzar