必须修改httpd.conf添加Listen指令(如Listen 8080)并启用httpd-vhosts.conf,为每个端口配置独立VirtualHost绑定不同DocumentRoot,同时用hosts绑定域名可避开端口警告。

XAMPP 默认只监听 80 端口,想同时跑多个 PHP 项目(比如 Laravel + WordPress + 自研 API),必须手动开启额外端口并绑定对应目录,否则只能靠子目录或改 htdocs 内容切换项目,效率极低。
修改 httpd.conf 添加监听端口
Apache 不会自动监听新端口,光改虚拟主机没用。必须先在 D:\xampp\apache\conf\httpd.conf(Windows)或对应路径的配置文件里显式声明:
- 搜索
Listen 80,在其下方新增行,例如:Listen 8080、Listen 8081、Listen 8000 - 避免使用
1024以下端口(系统保留,常被 Skype、IIS 占用) - 确认这些端口未被其他程序占用:命令行执行
netstat -ano | findstr :8080,无输出才安全 - 改完必须重启 Apache,否则新端口不会生效
启用并编辑 httpd-vhosts.conf 配置虚拟主机
直接在 httpd.conf 底部写 <VirtualHost> 可以工作,但不推荐——它和主配置耦合太紧,升级 XAMPP 容易被覆盖。正确做法是启用独立虚拟主机配置文件:
XAMPP 8.0.30 是一款免费、开源的跨平台 Web 服务器集成包,专为快速搭建本地 PHP 开发环境而设计。该版本核心组件包括:Apache 2.4.56、MySQL 8.0.33、PHP 8.0.30、phpMyAdmin 5.2.1 等。它支持 Windows、Linux 和 macOS 系统,可让开发者在个人电脑上轻松模拟服务器环境,无需复杂配置即可运行 WordPress、Thin
- 在
httpd.conf中找到#Include conf/extra/httpd-vhosts.conf,删掉开头的#取消注释 - 编辑
D:\xampp\apache\conf\extra\httpd-vhosts.conf - 每个端口配一个
<VirtualHost *:8080>块,DocumentRoot指向不同项目目录,例如:D:\projects\laravel-app\public - 务必设置
ServerName localhost(不是域名),否则 Apache 启动时可能报错_default_ VirtualHost overlap on port 8080
绕过浏览器对非标端口的“不安全提示”
Chrome / Edge 在访问 http://localhost:8081 时可能显示“此网站无法提供安全连接”,这不是证书问题,而是浏览器对非标准 HTTP 端口的默认拦截策略:
- 临时解决:在地址栏输入
chrome://flags/#unsafely-treat-insecure-origin-as-secure,将对应端口加入白名单(仅限开发机,勿用于生产) - 更稳妥做法:搭配
hosts文件 + 域名,例如把dev.laravel.test指向127.0.0.1,再在httpd-vhosts.conf中用ServerName dev.laravel.test绑定,这样就能用http://dev.laravel.test访问,彻底避开端口号和警告 - 注意:改完
hosts后需清 DNS 缓存(ipconfig /flushdns)
常见启动失败原因与验证步骤
配置完却打不开页面?90% 是这三类问题:
-
DocumentRoot路径错误:Windows 下路径分隔符必须是反斜杠\或双正斜杠//,单斜杠/在某些 Apache 版本下会解析失败 - 权限不足:如果项目目录在
C:\Users\下,Apache 可能因 UAC 限制读不到文件,建议放在D:\projects这类非系统盘路径 - PHP 模块未加载:多端口不改变 PHP 加载逻辑,但若某个项目依赖扩展(如
pdo_mysql),而php.ini中该扩展被注释,所有端口都会报Class not found - 验证顺序:先访问
http://localhost:8080看是否返回 Apache 默认页 → 再看是否返回你项目的index.php→ 最后用phpinfo()确认 PHP 配置一致
真正麻烦的不是加端口,而是每个端口背后要对齐文档根路径、PHP 版本、扩展开关、甚至 .htaccess 规则——它们都共享同一份 php.ini 和 Apache 模块,改一个就全改。所以多端口适合轻量隔离,真要长期维护多个技术栈差异大的项目,得上 Docker 或 Laragon。

















