Apache配置PHP虚拟主机的核心是精准指向public目录、启用重写与权限控制;必须包含ServerName(需hosts映射)、DocumentRoot(绝对路径指向public)、匹配的块(含AllowOverride All和Require all granted)、以及可选但推荐的ErrorLog和CustomLog。

Apache配置PHP时,VirtualHost的核心是把请求精准导向PHP项目的入口(通常是public/目录),同时开启重写和权限控制。写错路径、漏掉目录权限或忽略AllowOverride All,都会导致白屏、403、路由失效等问题。
基础结构必须包含这四块
一个可用的VirtualHost至少要定义以下内容,缺一不可:
-
ServerName:你的测试域名,比如
myapp.test(需在系统hosts文件中映射到127.0.0.1) -
DocumentRoot:必须指向PHP框架的
public子目录,例如"D:/projects/myapp/public"或/var/www/myapp/public -
块:路径要和 DocumentRoot完全一致,并显式授权:Options Indexes FollowSymLinksAllowOverride All(启用.htaccess重写)Require all granted(Apache 2.4必需,替代旧版Order Allow,Deny) - ErrorLog和CustomLog(可选但强烈建议):方便排查PHP报错或路由问题
Windows和Linux路径细节不能错
路径写法直接影响Apache能否加载文件:
- Windows下用正斜杠
/或双反斜杠\,比如D:/projects/app/public或D:\projects\app\public;单反斜杠会解析失败 - Linux/macOS路径区分大小写:
Public≠public,框架如ThinkPHP/Laravel默认要求小写public - 所有路径必须是**绝对路径**,不能用相对路径或
~符号
常见错误配置及后果
这些写法看着差不多,但实际会导致不同问题:
立即学习“PHP免费学习笔记(深入)”;
- ❌
DocumentRoot "D:/projects/myapp"(指向项目根目录)→index.php不被识别为入口,所有URL返回404 - ❌ 忘写
<directory></directory>块或漏掉Require all granted→ 403 Forbidden - ❌
AllowOverride None→.htaccess失效,路由重写不工作,/user/profile变成404 - ❌
ServerName localhost却没注释主配置里的DocumentRoot→ 虚拟主机不生效,始终走默认站点
完整可运行示例(ThinkPHP/Laravel通用)
保存到httpd-vhosts.conf,确保httpd.conf已启用该文件(去掉#Include前的#):
ServerName myapp.test
DocumentRoot "D:/projects/myapp/public"
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
ErrorLog "logs/myapp-error.log"
CustomLog "logs/myapp-access.log" combined



















