Informática y Software Práctico

Configurar virtual host XAMPP: el 403 que nadie te explica

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

Configurar virtual host XAMPP suele fallar por un motivo que casi nadie menciona: Apache carga primero el archivo httpd-vhosts.conf desde una ruta que tú no estás editando. Abres httpd.conf, añades tu bloque <VirtualHost *:80>, reinicias y sigues viendo el 403 o el famoso «It works!». El proyecto está bien; la directiva Include apunta a otro sitio.

Antes de tocar nada, comprueba en httpd.conf la línea que empieza por Include conf/extra/httpd-vhosts.conf. Si está comentada con #, ningún virtual host funcionará aunque lo hayas escrito perfecto. Ese es el primer punto donde se rompe la configuración de virtual host en XAMPP.

El bloque mínimo que sí funciona en httpd-vhosts.conf

Con el Include activo, edita C:xamppapacheconfextrahttpd-vhosts.conf. Un ejemplo real para un proyecto llamado tienda:

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

Fíjate en tres detalles que provocan el 90% de los errores al configurar virtual host XAMPP: barras normales en Windows, Require all granted (Apache 2.4 cambió la sintaxis respecto a 2.2) y AllowOverride All si usas Laravel, WordPress o cualquier CMS con .htaccess.

Sin AllowOverride All, las URLs amigables devuelven 404 aunque el virtual host esté bien definido. Me ha pasado con instalaciones de WordPress donde el home cargaba pero cualquier enlace interno fallaba.

hosts, DNS y el detalle que se olvida

El segundo punto crítico al configurar virtual host XAMPP está en C:WindowsSystem32driversetchosts. Añade:

127.0.0.1 tienda.local

Sin esta línea, el navegador no sabe resolver tienda.local y te lanzará un error de DNS. No es un problema de Apache, es resolución de nombres. Editar el archivo requiere permisos de administrador; Notepad normal no podrá guardar.

Un matiz que casi nadie comenta: si usas IPv6 en Windows, algunos navegadores intentan ::1 antes que 127.0.0.1. Añadir también ::1 tienda.local evita latencias raras de varios segundos en la primera carga.

El conflicto con el vhost por defecto

XAMPP trae un virtual host de ejemplo apuntando a htdocs. Si defines el tuyo después, Apache lo respeta, pero si lo pones antes, el primero gana como default. Muchos tutoriales omiten que el orden importa cuando hay varios bloques.

Además, si el puerto 80 está ocupado por IIS, Skype o un servicio de Adobe, Apache ni arranca. Cambiar a Listen 8080 y <VirtualHost *:8080> soluciona el conflicto, pero entonces la URL pasa a ser tienda.local:8080. Es una limitación real que no se puede evitar sin liberar el puerto.

Cuándo esto no funciona

Configurar virtual host XAMPP no resuelve nada si trabajas con HTTPS local. Necesitas generar un certificado autofirmado y añadir SSLEngine on con <VirtualHost *:443>. Tampoco sirve si tu proyecto usa Docker o Laravel Herd, donde el flujo es distinto.

En equipos con antivirus que interceptan el tráfico HTTP (Kaspersky, ESET), Apache puede responder pero el navegador mostrará advertencias. Desactivar la inspección SSL del antivirus para *.local es la salida más limpia.

La documentación oficial de Apache sobre name-based virtual hosts y las notas de XAMPP en su carpeta readme cubren la sintaxis, aunque rara vez mencionan el orden de carga. Ese detalle se aprende mirando los logs de apache/error.log, que indican exactamente qué archivo se está parseando y dónde falla.

Después de cada cambio, reinicia Apache desde el panel de XAMPP y verifica con httpd -S en la consola. Ese comando lista todos los virtual hosts activos y muestra cuál es el default. Si tu dominio no aparece ahí, el problema no es el navegador: es que Apache nunca leyó tu bloque.


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.