PHP不直接创建虚拟目录,虚拟目录由Web服务器(如Apache、Nginx)实现,本质是将物理路径映射为可访问的URL路径;Apache通过httpd-vhosts.conf配置VirtualHost并修改hosts文件;Nginx用location+alias实现路径别名;PHP内置服务器需靠router.php脚本模拟。

PHP 本身不直接创建虚拟目录,虚拟目录是 Web 服务器(如 Apache 或 Nginx)的功能。你看到的“PHP 创建虚拟目录”,实际是指在本地开发环境中,通过配置 Web 服务器,把某个物理文件夹映射为可通过浏览器访问的 URL 路径(比如 http://localhost/myapp),而该文件夹不一定在默认的 htdocs 或 www 目录下。
一、Apache 中设置虚拟目录(以 XAMPP/WAMP 为例)
这是最常见需求。以 XAMPP 为例(WAMP 类似):
- 打开
XAMPP\apache\conf\extra\httpd-vhosts.conf文件,在末尾添加如下配置:
DocumentRoot "D:/myproject"
ServerName myapp.local
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
- 保存后,用记事本以管理员身份打开
C:\Windows\System32\drivers\etc\hosts,添加一行:127.0.0.1 myapp.local - 重启 Apache。现在访问
http://myapp.local就会加载D:/myproject下的内容。
二、Nginx 中配置别名路径(非完整虚拟主机)
如果你不想配整个域名,只想让 /myapp 指向某个外部目录,可在 server 块中加 location:
alias D:/myproject/;
index index.php;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
include fastcgi_params;
}
}
注意:alias 末尾有斜杠,且 PHP 脚本路径需用 $request_filename 确保正确解析。
立即学习“PHP免费学习笔记(深入)”;
三、PHP 内置服务器(仅开发测试,不支持虚拟目录)
PHP 自带的 php -S 命令不支持传统意义上的虚拟目录,但可用路由器脚本模拟简单映射:
- 新建
router.php:
return false;
} elseif (strpos($_SERVER["REQUEST_URI"], '/myapp/') === 0) {
require __DIR__ . '/myproject/index.php';
} else {
require __DIR__ . '/public/index.php';
}
- 命令行运行:
php -S localhost:8000 router.php - 此时访问
http://localhost:8000/myapp/会执行myproject/index.php。
四、图文对照关键点提醒
看视频教程时,重点核对以下几处是否一致:
- 配置文件路径是否真实存在(比如
httpd-vhosts.conf是否被 Apache 加载——检查主配置中Include conf/extra/httpd-vhosts.conf是否启用) - 目录权限是否开放(特别是 Windows 上的“Require all granted”和 macOS/Linux 的文件读取权限)
- hosts 文件是否保存为纯文本、无 BOM、且未被杀毒软件拦截
- 浏览器访问时 URL 是否输入正确(
http://不可省略;myapp.local不是myapp.local/开头的子路径)



















