必须手动在httpd.conf中添加Listen指令并配置对应端口的<VirtualHost *:PORT>,否则请求被拒绝或返回403/404;还需启用Include、配置Directory权限、隔离runtime与数据库、修改hosts并显式带端口访问。

必须手动改 httpd.conf 加 Listen 指令,再在 httpd-vhosts.conf 里为每个端口配独立 <VirtualHost *:PORT> ——漏掉任一环节,请求直接被拒绝或返回 403/404。
Listen 指令不加,端口根本不会被 Apache 接收
Apache 不会自动监听你“以为它该听”的端口。只改 httpd-vhosts.conf 里的 <VirtualHost *:8080>,却不加 Listen 8080,浏览器访问 http://localhost:8080 会显示“连接被拒绝”,连 404 都看不到。
- 打开
XAMPP\apache\conf\httpd.conf,找到Listen 80,在其下方新增你要用的端口,例如:Listen 8080、Listen 8081 - 确保端口未被占用:Windows 上运行
netstat -ano | findstr :8080,查 PID 后用任务管理器确认 - 改完先验证语法:
httpd -t(进XAMPP\apache\bin目录执行),输出Syntax OK才能重启 - 小于 1024 的端口(如 80、443)需以管理员身份运行 XAMPP 控制面板,否则静默失败
VirtualHost 必须绑定具体端口且含完整权限配置
只写 DocumentRoot 不够,Apache 2.4+ 默认拒绝所有非 htdocs 子目录的访问,必须显式放开 <Directory> 权限,否则 403 是必然结果。
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
- 在
XAMPP\apache\conf\extra\httpd-vhosts.conf中,每个端口一个块,例如:<VirtualHost *:8080> -
ServerName可设为localhost或自定义域名(需同步改hosts文件),但不能留空 -
DocumentRoot路径用正斜杠,末尾不带斜杠:"C:/xampp/htdocs/site-a"✔️,"C:/xampp/htdocs/site-a/"❌ - 必须包含
<Directory "C:/xampp/htdocs/site-a">块,并写明:Require all granted和AllowOverride All
runtime 目录隔离和 .htaccess 重写规则要适配端口
多个 PbootCMS/FastAdmin 实例共用同一 runtime 或未改 .htaccess,会导致缓存污染、URL 重写失败(报 No input file specified.)。
-
runtime目录不能共用:每个实例单独建目录,如runtime-8080,并在入口文件(如public/index.php)中用define('RUNTIME_PATH', __DIR__ . '/../runtime-8080/');指定 -
.htaccess中的RewriteRule若含路径硬编码(如匹配^index\.php),需改为更健壮形式:RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L](加?把路径转为查询参数) - 数据库配置也必须隔离:检查
application/database.php中的database名和prefix,避免多个后台写同一张表
hosts 文件修改和浏览器访问方式必须匹配端口
即使配置全对,用 http://site-a.local 访问仍走 80 端口,Header(如 Upgrade-Insecure-Requests、CSP)不会触发 —— 浏览器只对显式带端口的 URL 应用对应虚拟主机配置。
-
hosts文件可写127.0.0.1 site-a.local,但访问时必须输完整地址:http://site-a.local:8080 - 用管理员权限编辑
hosts,保存后执行ping site-a.local验证是否解析到127.0.0.1 - 浏览器 DNS 缓存可能干扰,访问时加随机参数绕过,如
http://site-a.local:8080/?t=123 - 如果用了
Header类指令(CORS、CSP、Vary),务必确认mod_headers已启用:LoadModule headers_module modules/mod_headers.so在httpd.conf中未被注释
最容易被忽略的是 httpd.conf 里 Include conf/extra/httpd-vhosts.conf 这行是否取消了注释 —— 它控制整个虚拟主机配置是否加载,不打开,后面所有 <VirtualHost> 都是废纸。

















