结论:xampp用不同端口跑多个站点,必须同步修改httpd.conf的listen指令和httpd-vhosts.conf中对应端口的块,缺一即导致404或503;同时需确保servername与访问url完全一致、documentroot为无尾斜杠绝对路径、内含require all granted,且配置后须httpd -t验证语法再重启。

直接说结论:XAMPP 要用不同端口跑多个站点,必须同时改 httpd.conf 的 Listen 和 httpd-vhosts.conf 的 <virtualhost></virtualhost>,漏掉任一环节都会 404 或 503。
修改 httpd.conf 启用多端口监听
Apache 默认只监听 80,不加配置就无法响应 :8080 这类请求。这步是底层前提,不是可选项。
- 打开
XAMPP\apache\conf\httpd.conf - 找到
Listen 80这一行,在它下面新增你要的端口,比如:Listen 8080Listen 8081 - 检查
ServerName行是否匹配——如果只配了ServerName localhost:80,但又监听8080,Apache 启动会失败;建议统一改成ServerName localhost:80(保留默认),再额外加行:ServerName localhost:8080ServerName localhost:8081 - 确认
Include conf/extra/httpd-vhosts.conf这行没被注释(即前面没有#)
在 httpd-vhosts.conf 中为每个端口定义 <virtualhost></virtualhost>
每个端口对应一个独立的 <virtualhost></virtualhost> 块,不能复用同一个块、也不能把多个端口写进一个块里。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 打开
XAMPP\apache\conf\extra\httpd-vhosts.conf - 每个站点单独写一个块,例如:
<virtualhost> ServerName localhost:8080 DocumentRoot "C:/xampp/htdocs/project-a" <directory> Require all granted </directory></virtualhost><virtualhost> ServerName localhost:8081 DocumentRoot "C:/xampp/htdocs/project-b" <directory> Require all granted </directory></virtualhost> -
DocumentRoot必须是绝对路径,结尾不能带斜杠(C:/xampp/htdocs/project-a/是错的) -
ServerName必须和你浏览器里输入的地址一致(http://localhost:8080就填localhost:8080),否则 Apache 会 fallback 到第一个<virtualhost></virtualhost>块
绕不开的权限与访问控制问题
即使配置全对,也常卡在 403 Forbidden。根本原因是 Apache 2.4+ 默认拒绝所有目录访问,必须显式放行。
- 上面示例里的
<directory></directory>块中,Require all granted是关键,缺了就 403 - 不要去动
httpd.conf里全局的Require all denied,那会影响整个服务;只在每个<virtualhost></virtualhost>内部做最小化授权 - 如果项目含
.htaccess,还需把AllowOverride设为All:AllowOverride All - Windows 下路径分隔符用正斜杠
/(不是反斜杠\),否则 Apache 解析失败
验证语法 + 重启前必做这三件事
改完配置不验证就点 Start,Apache 极大概率启动失败,面板按钮瞬间变灰,错误日志里只显示 “Syntax error”,根本看不出哪行错。
- 打开命令行,cd 到
XAMPP\apache\bin目录,运行:httpd -t
输出Syntax OK才算过关 - 检查 Windows hosts 文件——虽然用
localhost:端口不需要改 hosts,但一旦你用了自定义域名(如admin.dev:8080),就必须在C:\Windows\System32\drivers\etc\hosts加:127.0.0.1 admin.dev - 浏览器缓存和 DNS 缓存干扰大,测试时优先用无痕窗口,或清空 DNS 缓存:
ipconfig /flushdns
最容易被忽略的是:端口监听和虚拟主机端口必须严格一致,且 ServerName 必须和实际访问 URL 完全匹配(包括端口号)。少一个冒号、多一个空格,Apache 都不会认。










