PHP本身不创建虚拟目录或管理多站点路由,这是Web服务器(Apache/Nginx/IIS)的职责;需正确配置Apache的VirtualHost、启用httpd-vhosts.conf、为每个站点配Directory权限段、DocumentRoot路径规范、hosts绑定并验证。

PHP 本身不创建虚拟目录,也不管理多站点路由——这是 Web 服务器(Apache/Nginx/IIS)的职责。你配置的是 Apache 的 VirtualHost、Nginx 的 server 块或 IIS 的虚拟目录映射,PHP 只负责执行接收到的 .php 文件。只要 Web 服务器把请求正确分发到对应目录,并把 PHP 请求交给 PHP 引擎(mod_php 或 PHP-FPM),PHP 8.3/8.2/7.3 就能照常运行。
Apache 多站点必须走 httpd-vhosts.conf
默认情况下,XAMPP/WAMP/phpStudy 的 httpd-vhosts.conf 是被注释掉的, 配置完全不生效。必须做两件事:
- 打开主配置
httpd.conf,找到并取消注释这行:Include conf/extra/httpd-vhosts.conf - 每个站点单独写一个
块,不能合并;ServerName必须唯一,比如local.blog.test和local.api.test -
DocumentRoot路径末尾不加斜杠(C:/dev/blog/public✅,C:/dev/blog/public/❌);Windows 下推荐用正斜杠或双反斜杠
Directory 权限段不能省,Require all granted 是刚需
Apache 2.4+ 默认拒绝所有访问。漏掉 或写错位置(比如放在 外面),直接触发 403 Forbidden。
-
的路径必须和DocumentRoot完全一致,且用英文双引号包裹(尤其 Windows 路径含空格时) - 必须包含:
Options Indexes FollowSymLinksAllowOverride AllRequire all granted - 如果是 ThinkPHP/Laravel 等框架,
AllowOverride All才能让 .htaccess 重写规则生效
hosts 绑定 + ping 验证是硬门槛
浏览器不会自动把 local.blog.test 解析成 127.0.0.1。必须手动改系统 hosts 文件:
- Windows:用管理员权限打开
C:\Windows\System32\drivers\etc\hosts
macOS/Linux:用sudo编辑/etc/hosts - 每行一个域名,严格格式:
127.0.0.1 local.blog.test127.0.0.1 local.api.test
不要加www.,不要逗号,前后无空格 - 改完立刻命令行执行:
ping local.blog.test
确认返回127.0.0.1,否则 Apache 根本收不到这个域名的请求
PHP 版本无关路由,但影响执行细节
多站点共用 PHP 8.3,不影响 Apache 分发逻辑,但要注意几个执行层细节:
- 如果用 mod_php(XAMPP/WAMP 默认),
php.ini是全局的;如需 per-site 配置(比如不同站点上传限制不同),得在里加:php_admin_value upload_max_filesize 64M - 如果用 PHP-FPM,确保每个站点的
ProxyPassMatch或SetHandler指向正确的 socket 或端口 - PHP 8.3 对
mkdir($path, 0755, true)更敏感:某级父目录只读就会失败,部署前务必用is_dir()+ 返回值双重校验
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











