Informática y Software Práctico

XAMPP crear host virtual personalizado: el fallo del 403

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

Cuando intentas usar XAMPP para crear host virtual personalizado, lo normal es que acabes viendo un error 403 o una página en blanco en lugar de tu proyecto. No es un problema de XAMPP en sí, sino de cómo Apache resuelve los nombres y los permisos de las carpetas. La mayoría de tutoriales se saltan ese detalle y por eso la gente se atasca justo después de editar el archivo hosts.

Voy a contarte el escenario exacto que me encontré hace unos meses montando un entorno local con dos proyectos: tienda.local y blog.local. Edité C:WindowsSystem32driversetchosts, añadí las líneas 127.0.0.1 tienda.local y 127.0.0.1 blog.local, configuré los VirtualHost en httpd-vhosts.conf y, aun así, Apache seguía mostrando el index de htdocs. El motivo: me faltaba la directiva Require all granted en el bloque <Directory>.

Por qué el archivo hosts no basta

El archivo hosts solo le dice al sistema operativo a qué IP debe ir ese nombre. Apache, por su parte, necesita saber qué carpeta servir cuando llega una petición con ese ServerName. Si tienes un solo host virtual, Apache lo usará como predeterminado para cualquier dominio no reconocido; si tienes varios, el primero que aparezca en el archivo se convierte en el que responde por defecto. Ese comportamiento explica muchos 404 inesperados.

Un detalle que casi nadie comenta: en Windows necesitas abrir el Bloc de notas como administrador para guardar el archivo hosts. Si no lo haces, el editor te deja escribir pero al guardar da un error silencioso y tú crees que ya está modificado. Yo perdí casi una hora con eso la primera vez.

Para verificar que el archivo hosts realmente cambió, abre una consola y lanza ping tienda.local. Debe responder desde 127.0.0.1. Si responde desde otra IP o dice que no encuentra el host, el cambio no se aplicó.

Configuración de VirtualHost que sí funciona

Dentro de C:xamppapacheconfextrahttpd-vhosts.conf, el bloque mínimo viable para un host virtual personalizado en XAMPP queda así:

<VirtualHost *:80> ServerName tienda.local DocumentRoot «C:/xampp/htdocs/tienda» <Directory «C:/xampp/htdocs/tienda»> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> </VirtualHost>

Dos cosas que suelen romperlo: usar barras invertidas en DocumentRoot (Apache en Windows las acepta, pero algunos módulos como mod_rewrite se comportan raro) y olvidar que AllowOverride All es imprescindible si tu proyecto usa .htaccess, por ejemplo con Laravel o WordPress. Sin esa línea, las URLs amigables dan 404 aunque el host virtual esté bien definido.

Después de guardar, reinicia Apache desde el panel de control de XAMPP. No basta con recargar el navegador: el servidor cachea la configuración de los VirtualHost.

Errores que aparecen una y otra vez

El más común es el 403 Forbidden. Casi siempre viene de que la carpeta del proyecto no tiene permisos de lectura para el usuario con el que corre Apache, o de que falta el bloque <Directory>. En XAMPP, Apache corre como servicio y puede no tener acceso a carpetas fuera de htdocs. Yo lo solucioné poniendo los proyectos dentro de htdocs en lugar de en Documentos.

Otro clásico: el navegador te redirige a la página de XAMPP en lugar de mostrar tu proyecto. Eso pasa cuando otro VirtualHost aparece antes en el archivo y no tiene ServerName coincidente. Apache usa el primero como comodín. La solución es declarar un host por defecto al principio con un ServerName comodín y un DocumentRoot neutro.

Y ojo con el puerto 80. Si tienes IIS, Skype o algún servicio de Adobe ocupándolo, Apache no arranca y XAMPP muestra un error de puerto en uso. Puedes cambiar el puerto de escucha a 8080, pero entonces tendrás que escribir tienda.local:8080 en el navegador, lo que rompe la ilusión del host personalizado.

Cuándo conviene no usar host virtual

Si solo tienes un proyecto y no te importa acceder por localhost/miproyecto, el host virtual personalizado añade complejidad sin beneficio real. También es mala idea si compartes el equipo con otras personas que no entienden por qué tienda.local no carga en su navegador: cada máquina necesita su propio archivo hosts.

Para equipos de desarrollo con varios proyectos y rutas absolutas en el código (típico en WordPress con plugins que guardan URLs completas), el host virtual es casi obligatorio. Sin él, migrar el proyecto al servidor real se convierte en un infierno de búsquedas y reemplazos.

Verificación final antes de dar por cerrado el tema

Comprueba tres cosas en orden: el ping al dominio, que Apache arranca sin errores desde el panel de XAMPP, y que el navegador muestra el index del proyecto y no el de htdocs. Si algo falla, revisa los logs en C:xamppapachelogserror.log: ahí aparece el motivo exacto del 403 o del 404, con la ruta que Apache intentó leer.

La documentación oficial de Apache sobre VirtualHost y la guía de XAMPP para Windows cubren la sintaxis, pero no los detalles de permisos ni el orden de resolución. Esas partes se aprenden leyendo los logs y probando. Ningún tutorial te garantiza que funcione a la primera en tu equipo concreto, porque depende de la versión de Windows, del antivirus y de si Apache corre como servicio o como aplicación.


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.