Nginx 本身无 Apache 式虚拟目录机制,phpStudy V8.1 界面中“虚拟目录”按钮在 Nginx 模式下不生效;替代方案是手动在站点 vhost 配置中用 location + alias 实现映射,需严格匹配斜杠、使用 $request_filename 传参,并确保权限与 PHP-CGI 正常运行。

phpStudy V8.1 中 Nginx 模式不支持传统“虚拟目录”概念
直接说结论:Nginx 本身没有 Apache 那种 Alias 或 VirtualDir 的内置虚拟目录机制,phpStudy V8.1 的图形界面在 Nginx 模式下也**不提供“添加虚拟目录”的配置入口**。你看到的“虚拟目录”按钮仅对 Apache 模式生效,点它没反应或报错是正常现象。
真正可行的替代方案是通过手动修改 Nginx 配置,用 location 块 + alias(或 root)实现类似效果——但要注意语义和路径处理差异。
用 location + alias 映射非根目录的 PHP 路径
这是最贴近“虚拟目录”需求的做法,适用于把 /upload 这类 URL 映射到物理路径 D:/www/static/upload,且该路径下有 PHP 文件需执行。
操作步骤:
立即学习“PHP免费学习笔记(深入)”;
- 打开 phpStudy → “网站” → 找到对应站点 → 点击“管理” → “配置文件” → 编辑
nginx.conf(实际是站点对应的vhost/*.conf) - 在
server { ... }块内添加如下location块(注意末尾斜杠和路径一致性):
location /upload/ {
alias D:/www/static/upload/;
index index.php;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
}
关键点:
-
alias后路径必须以/结尾,且location路径也必须以/结尾,否则文件匹配会出错 -
SCRIPT_FILENAME $request_filename是关键,不能写成$document_root$fastcgi_script_name(那是root模式用的) - Windows 路径用正斜杠
/,不要用反斜杠\
为什么不用 root?
root 是拼接路径,alias 是完全替换。比如:
-
location /upload/ { root D:/www; }→ 请求/upload/test.php实际找的是D:/www/upload/test.php -
location /upload/ { alias D:/www/static/upload/; }→ 请求/upload/test.php实际找的是D:/www/static/upload/test.php
如果你只是想把某个子目录“挂载”到 URL 下,alias 更符合直觉;但若该目录是完整应用(含自身路由),用 root + try_files 更稳妥。
常见失败现象和排查点
配完重启 Nginx 却 404、502 或提示“No input file specified”,大概率是这几个地方错了:
- Nginx 配置语法错误:保存前用
nginx -t(在 phpStudy 的“其他选项菜单”→“PHP扩展及设置”→“Nginx”里可找到命令行入口)验证 - 路径权限问题:Windows 下确保
IIS_IUSRS或Everyone对目标目录有读取+执行权限(尤其 PHP 文件) - PHP-CGI 未运行或端口冲突:检查 phpStudy 右下角状态栏,Nginx 和 PHP(nts 版本)都必须是绿色运行中
-
fastcgi_param SCRIPT_FILENAME写成了$document_root$fastcgi_script_name:这会导致路径拼错,alias场景下必须用$request_filename
路径映射类配置极其依赖大小写、斜杠、空格和变量语义,改一行就得验一行,别跳步。



















