Preguntas y Respuestas

XAMPP habilitar mod_rewrite: por qué sigue en 404

Post actualizado el día octubre 29, 2026 by DeiviSanzPlay

Si has tocado el archivo httpd.conf, has descomentado la línea de mod_rewrite y aun así tus URLs amigables devuelven 404, el problema casi nunca está donde crees. XAMPP habilitar mod_rewrite no es solo quitar un almohadilla delante de una directiva: hay tres capas que deben estar alineadas y la mayoría de tutoriales solo menciona una.

Te lo cuento desde la frustración real. Hace un par de años monté un WordPress local en XAMPP para probar un tema antes de subirlo a producción. Edité httpd.conf, reinicié Apache, comprobé con phpinfo() que el módulo estaba cargado… y los enlaces permanentes seguían rotos. El módulo estaba activo, pero AllowOverride estaba en None para el directorio htdocs. Apache ignoraba el .htaccess en silencio. Ese es el fallo número uno.

Las tres capas que debes revisar antes de tocar nada más

La primera capa es el módulo. Abre C:xamppapacheconfhttpd.conf (o /opt/lampp/etc/httpd.conf en Linux, /Applications/XAMPP/etc/httpd.conf en macOS) y busca mod_rewrite.so. La línea debe estar sin #:

LoadModule rewrite_module modules/mod_rewrite.so

La segunda capa es AllowOverride. Esta es la que se salta todo el mundo. Localiza el bloque <Directory «C:/xampp/htdocs»> y cambia AllowOverride None por AllowOverride All. Sin esto, mod_rewrite puede estar cargado pero Apache no procesará las reglas del .htaccess. Para verificar que el módulo está activo, crea un info.php con <?php phpinfo(); ?> y busca la sección apache2handler → Loaded Modules. Si aparece mod_rewrite, la primera capa está resuelta.

La tercera capa es el reinicio. XAMPP no recarga Apache automáticamente al guardar el archivo. Hay que usar el botón Stop/Start del panel de control o, desde consola, httpd -k restart. Un cambio sin reinicio no se aplica y te hace perder media hora buscando fantasmas.

El error de la ruta del proyecto: no siempre está en htdocs

Mucha gente crea subcarpetas dentro de htdocs, como htdocs/miproyecto, y ahí también hace falta que AllowOverride All aplique. Apache permite definir bloques <Directory> específicos. Si tienes un <Directory «C:/xampp/htdocs/miproyecto»> con AllowOverride None, ese proyecto concreto no leerá su .htaccess aunque el directorio padre sí lo permita. Revisa también el bloque <Directory «C:/xampp/htdocs»> global y el archivo extra/httpd-vhosts.conf si usas virtual hosts.

Un caso típico: Laravel o Symfony en local. Su public/.htaccess reescribe todo hacia index.php. Si el DocumentRoot apunta a la carpeta raíz del proyecto en lugar de a public/, las reglas nunca se ejecutan correctamente. XAMPP habilitar mod_rewrite no arregla una configuración de DocumentRoot mal puesta.

Esto no funciona para todos los escenarios

Si usas XAMPP en Windows con el firewall de Windows Defender activo, a veces el reinicio de Apache falla y el proceso antiguo queda corriendo en el puerto 80. El módulo parece cargado pero el servidor real no es el que editaste. Comprueba con netstat -ano | findstr :80 que solo hay un proceso escuchando.

En macOS con XAMPP, el archivo de configuración puede estar en /Applications/XAMPP/xamppfiles/etc/httpd.conf, no en la ruta que aparece en tutoriales de Windows. Y en Linux, si lanzaste XAMPP con sudo, los permisos del .htaccess deben permitir lectura al usuario de Apache (daemon o nobody). Un .htaccess con permisos 600 del usuario root hace que Apache lo ignore sin error.

Otro límite real: mod_rewrite no funciona con el servidor integrado de PHP (php -S). Si estás probando con ese servidor en lugar de Apache, ninguna regla de reescritura se aplicará. XAMPP habilitar mod_rewrite solo tiene sentido cuando el servidor que responde es Apache.

Cómo comprobar que todo está bien sin adivinar

Crea un .htaccess de prueba en la raíz del proyecto con una regla simple:

RewriteEngine On
RewriteRule ^test-rewrite$ index.php [L]

Accede a http://localhost/test-rewrite. Si carga index.php, las tres capas están bien. Si devuelve 404, revisa AllowOverride y los logs de Apache en xampp/apache/logs/error.log. Ese log te dice si Apache está leyendo el .htaccess o lo está ignorando por permisos. Es la fuente de verdad más fiable que cualquier foro.

La documentación oficial de Apache sobre mod_rewrite y la guía de configuración de XAMPP son las referencias que deberías consultar antes de aplicar cambios. No hay atajos: XAMPP habilitar mod_rewrite es un proceso de tres comprobaciones y un reinicio, nada más. Si tras eso sigue fallando, el problema está en tu .htaccess o en la ruta del proyecto, no en el módulo.


Sobre el autor: DeiviSanzPlay — Soy David Sanz, Editor y Responsable de Contenidos. Mi trabajo consiste en revisar, corregir y mejorar los contenidos de este blog para que la información sea clara, útil y esté bien estructurada. Trabajo con diferentes temáticas y verticales, por lo que una parte importante de mi día a día es analizar cada contenido, cuidar la redacción y asegurar que el lector encuentre información de calidad. Me gusta prestar atención a los detalles. Desde una corrección de estilo hasta la organización de un artículo, todo cuenta cuando se trata de crear contenidos que realmente aporten valor y sean fáciles de entender. En este blog encontrarás artículos sobre diferentes temas y sectores. Mi responsabilidad es cuidar y supervisar cada contenido para que mantenga unos estándares de calidad y ofrezca una buena experiencia a quien nos visita. Porque para mí, un buen contenido no consiste únicamente en escribir. También hay que revisar, contrastar, ordenar y pensar en la persona que está al otro lado de la pantalla.

Perfiles verificables: Sitio web

Publicado el 29 de October de 2026. Última revisión: 29 de October de 2026.