PHP本身不创建虚拟目录,它是脚本语言,不处理URL路径映射;所谓“PHP虚拟目录”实为Web服务器(Apache/Nginx/IIS)将URL路径映射到非根目录物理路径,并确保PHP脚本能被正确解析执行。

PHP 本身不创建虚拟目录——它是脚本语言,不处理 URL 路径映射。所谓“PHP 虚拟目录”,实际是 Web 服务器(Apache / Nginx / IIS)将某个 URL 路径(如 /admin)指向非主站点根目录的物理路径,并确保 PHP 脚本能被正确解析执行。官方文档从不单独讲“PHP 怎么建虚拟目录”,而是分散在各服务器模块和 PHP 运行模式的配置说明中。
Apache:Alias + Directory 权限缺一不可
Apache 官方文档明确指出:Alias 仅做路径映射,不自动赋予访问权限。必须配合 块显式授权,否则返回 403。
-
Alias /api "D:/www/backend/api"只告诉 Apache “/api 开头的请求去这个文件夹找” - 但若没写对应
,请求直接被拒绝Require all granted - PHP 文件不执行?检查
AddHandler application/x-httpd-php .php是否在该内生效;AllowOverride None会屏蔽 .htaccess 中的 handler 设置
Nginx:alias 不等于 root,SCRIPT_FILENAME 必须手动拼
Nginx 官方文档强调:alias 是“替换 URI 前缀”,root 是“拼接路径”。用错会导致 404 或 502。
-
location /admin { alias D:/www/admin/; }→ 请求/admin/index.php实际查找D:/www/admin/index.php -
location /admin { root D:/www; }→ 同样请求会找D:/www/admin/index.php(多了一层/admin) - 最关键的是:
fastcgi_param SCRIPT_FILENAME不能依赖$document_root(alias 下无效),必须用$request_filename或$document_root$fastcgi_script_name并确保root已正确定义
IIS:虚拟目录默认无 PHP 处理能力
微软官方文档说明:IIS 的虚拟目录只是符号链接,不继承父网站的处理程序映射。PHP 执行依赖 FastCGI 模块绑定,必须手动添加或转换为应用程序。
- 新建虚拟目录后,必须进 IIS 管理器 → 选中该目录 → “处理程序映射” → 添加模块映射:
*.php→FastCgiModule→C:\php\php-cgi.exe - 若要支持 PATH_INFO(如 ThinkPHP/Laravel),还需在虚拟目录根放
Web.config配置重写规则,否则所有带参数的 URL 报 “No input file specified” - 转换为应用程序更可靠:右键 → “转换为应用程序”,可独立使用应用池、继承完整处理链
PHP 配置项:cgi.fix_pathinfo 是 Windows 场景开关
PHP 官方手册明确标注:cgi.fix_pathinfo 控制 CGI/FastCGI 模式下 SCRIPT_NAME 和 PATH_INFO 的解析逻辑。Windows + Nginx/IIS 组合下,设为 0 将导致虚拟目录内脚本全部报 “File not found”。
-
cgi.fix_pathinfo = 1:PHP 根据SCRIPT_FILENAME全路径反推SCRIPT_NAME,兼容虚拟目录路径前缀 -
cgi.fix_pathinfo = 0:PHP 仅用SCRIPT_NAME(即原始 URL 路径)匹配当前目录下的文件,虚拟目录路径无法命中 - 改完 php.ini 后,必须重启 php-cgi.exe 或整个 FastCGI 进程,不是 reload nginx 即可
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











