Informática y Software Práctico

XAMPP cambiar document root: el error de la barra final

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

Cuando alguien intenta XAMPP cambiar document root por primera vez, casi siempre comete el mismo fallo: editar httpd.conf, reiniciar Apache y encontrarse con un 403 Forbidden o un Object not found. No es que la ruta esté mal escrita; es que Apache interpreta cada barra y cada espacio de forma literal, y el bloque <Directory> sigue apuntando a la carpeta antigua.

Lo he visto decenas de veces en equipos de desarrollo que montan un proyecto Laravel o un WordPress local. Cambian DocumentRoot «C:/xampp/htdocs» por DocumentRoot «C:/proyectos/miweb», guardan, reinician y el navegador les devuelve un 403. El motivo: el permiso de directorio no se movió con la ruta.

Por qué el cambio de DocumentRoot falla aunque la ruta sea correcta

En el archivo httpd.conf hay dos bloques que deben ir siempre emparejados: el DocumentRoot y el <Directory «…»> con Require all granted. Si cambias el primero y no el segundo, Apache sirve la ruta nueva pero aplica las reglas de acceso de la vieja. De ahí el 403.

He comprobado en instalaciones recientes de XAMPP para Windows que el archivo tiene dos líneas de DocumentRoot: una activa y otra comentada. Mucha gente descomenta la segunda y deja la primera, generando un conflicto que Apache resuelve usando la última que encuentra. El resultado es un cambio de document root a medias.

También aparece el problema de las barras. En Windows, Apache acepta tanto C:/xampp/htdocs como C:xampphtdocs, pero mezclar ambas en el mismo bloque rompe la lectura. Una ruta con espacios sin comillas también falla, y el log de Apache no siempre lo dice con claridad.

Cómo cambiar el document root sin romper el acceso

El procedimiento que funciona de forma consistente pasa por tocar tres puntos, no uno:

1. Detener Apache desde el panel de XAMPP.
2. Abrir C:xamppapacheconfhttpd.conf con un editor que respete saltos de línea (Notepad++ o VS Code, no el Bloc de notas).
3. Cambiar DocumentRoot y el <Directory> asociado a la misma ruta nueva.
4. Verificar que la carpeta destino existe y que el usuario del servicio tiene permisos de lectura.
5. Revisar httpd-vhosts.conf si hay virtual hosts definidos; ahí puede quedar otra referencia a la ruta antigua.

Muchos tutoriales de XAMPP cambiar document root omiten el paso 5 y el usuario se pregunta por qué el navegador sigue mostrando el proyecto anterior. Los virtual hosts tienen prioridad sobre el DocumentRoot global en cuanto hay un ServerName que coincide.

El caso del puerto 80 ocupado

Hay un error secundario que se confunde con el cambio de ruta: el puerto 80 lo ocupa Skype, IIS o algún servicio de Windows. Apache no arranca y el usuario cree que la ruta nueva es la culpable. Antes de tocar nada, conviene comprobar con netstat -ano | findstr :80 si hay otro proceso escuchando.

Si el puerto está libre y Apache arranca pero devuelve 403, entonces sí es el bloque <Directory>. Esta distinción ahorra horas y evita reinstalar XAMPP sin motivo.

Limitaciones reales de este ajuste

Cambiar el document root en XAMPP no funciona bien si la carpeta destino está en una unidad de red, en una ruta con caracteres no ASCII o dentro de una carpeta sincronizada por OneDrive. Apache lee la ruta al iniciar y los permisos heredados de esos entornos suelen bloquear el acceso. Tampoco resuelve problemas de PHP si el proyecto depende de rutas absolutas definidas en el propio código.

Y no sustituye a un entorno de virtualización. Para proyectos serios, herramientas como Docker o Laravel Valet ofrecen un aislamiento que XAMPP no da. El cambio de document root es útil para pruebas locales rápidas, no para producción.

Comprobación final antes de dar por cerrado el cambio

Tras reiniciar Apache, abrir http://localhost y verificar que la página servida es la del proyecto nuevo. Si aparece el listado de directorios en lugar del index, falta el DirectoryIndex o el archivo no existe en la ruta indicada. Revisar el error.log de Apache en C:xamppapachelogs da la pista exacta: normalmente una línea con client denied by server configuration confirma que el bloque <Directory> quedó desincronizado.

La documentación oficial de Apache sobre DocumentRoot y <Directory> es la referencia para entender por qué ambos deben moverse juntos. No hay atajo: si solo cambias uno, el error vuelve.


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.