Síntomas
- La página de inicio de WordPress carga correctamente.
- Todas las demás páginas, entradas, categorías y enlaces devuelven error 404.
- El problema ocurre después de una migración, cambio de hosting o modificación del archivo
.htaccess.
Causa
WordPress utiliza el archivo .htaccess para manejar las URLs amigables (permalinks). Cuando este archivo no existe, está vacío o le faltan las directivas de reescritura necesarias, el servidor no puede redirigir las solicitudes correctamente al archivo index.php de WordPress.
Solución
Paso 1: Restaurar las directivas de WordPress en .htaccess
Accede a los archivos de tu sitio mediante el Administrador de Archivos de tu panel de control (cPanel o DirectAdmin) o por FTP.
Localiza el archivo .htaccess en la raíz de tu instalación de WordPress (donde está wp-config.php).
Nota: El archivo .htaccess es un archivo oculto. En el Administrador de Archivos, habilita la opción para mostrar archivos ocultos.
Si el archivo no existe, créalo. Luego añade o reemplaza el contenido con las siguientes directivas básicas de WordPress:
# BEGIN WordPress
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
Guarda el archivo.
Paso 2: Verificar permisos del archivo
Asegúrate de que el archivo .htaccess tenga los permisos correctos:
- Permisos recomendados:
444(solo lectura) - Propietario: tu usuario de hosting
En cPanel o DirectAdmin, puedes cambiar los permisos haciendo clic derecho sobre el archivo y seleccionando "Permisos" o "Change Permissions".
Paso 3: Verificar que el problema esté resuelto
Visita cualquier página o entrada de tu sitio. Si todo funciona correctamente, el problema está resuelto.
WordPress en un subdirectorio
Si WordPress está instalado en un subdirectorio (ej. tudominio.com/blog/), modifica RewriteBase y la última regla:
# BEGIN WordPress
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
# END WordPress
Reemplaza /blog/ con el nombre de tu subdirectorio.
Explicación de las directivas
| Directiva | Función |
|---|---|
RewriteEngine On |
Activa el motor de reescritura de URLs. |
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] |
Preserva el encabezado de autorización HTTP para la API REST. |
RewriteBase / |
Define la base para las reglas de reescritura. |
RewriteRule ^index\.php$ - [L] |
Si la solicitud es para index.php, no hacer nada más. |
RewriteCond %{REQUEST_FILENAME} !-f |
Condición: el archivo solicitado no existe físicamente. |
RewriteCond %{REQUEST_FILENAME} !-d |
Condición: el directorio solicitado no existe físicamente. |
RewriteRule . /index.php [L] |
Redirigir todas las solicitudes que cumplan las condiciones a index.php. |
Solución de problemas
El error persiste después de añadir las directivas
- Verifica que el archivo
.htaccessesté en la raíz de WordPress (mismo directorio quewp-config.php). - Confirma que las directivas estén correctamente copiadas, sin espacios o caracteres adicionales.
- Contacta a tu proveedor de hosting para verificar que el módulo
mod_rewriteesté habilitado.
El archivo .htaccess se sobrescribe o modifica
Si el archivo .htaccess se sobrescribe después de añadir las directivas, esto puede indicar:
-
Un plugin interfiriendo: Algunos plugins de caché, seguridad o SEO modifican
.htaccess. Revisa los plugins instalados recientemente o desactívalos temporalmente para identificar el causante. -
Malware en el sitio: El malware frecuentemente modifica
.htaccesspara inyectar redirecciones maliciosas. Escanea tu sitio en busca de archivos infectados y revisa los logs de acceso en busca de actividad sospechosa.