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.
Perfiles verificables: Sitio web
Publicado el 29 de October de 2026. Última revisión: 29 de October de 2026.