PHP本身不直接创建虚拟目录,虚拟目录是Web服务器功能;Apache用Alias+Directory配置,Nginx用location+alias+SCRIPT_FILENAME拼接,IIS需手动添加FastCGI映射并设cgi.fix_pathinfo=1。

PHP本身不直接创建虚拟目录,虚拟目录是Web服务器(如Apache、Nginx、IIS)的功能,PHP只是在该目录下运行的脚本语言。所谓“用PHP创建虚拟目录”,实质是配置Web服务器,使其将某个URL路径映射到服务器上非网站根目录的物理位置,并确保PHP文件能正常解析执行。下面分场景说明关键步骤。
Apache环境下设置PHP虚拟目录
这是最常见的情形,核心靠Alias指令配合目录权限控制:
- 编辑
httpd.conf或站点对应的.conf文件,在<virtualhost></virtualhost>块内添加:
Alias /myapp /var/www/myapp<br><Directory "/var/www/myapp"><br> Options Indexes FollowSymLinks<br> AllowOverride All<br> Require all granted<br></Directory>
-
/myapp是浏览器访问路径(如http://localhost/myapp/index.php) -
/var/www/myapp是服务器上的真实路径,需提前创建并放好PHP文件 - 确保
mod_alias和mod_rewrite已启用,保存后重启Apache
Nginx环境下设置PHP虚拟目录
Nginx不支持Alias,改用location + alias实现类似效果:
- 在
server块中添加:
location /myapp {<br> alias /var/www/myapp/;<br> index index.php;<br> location ~ \.php$ {<br> fastcgi_pass 127.0.0.1:9000;<br> fastcgi_index index.php;<br> fastcgi_param SCRIPT_FILENAME $request_filename;<br> include fastcgi_params;<br> }<br>}
- 注意
alias末尾的斜杠必须与location路径严格对应(/myapp→/var/www/myapp/) -
SCRIPT_FILENAME要用$request_filename而非$document_root,否则PHP会找不到文件 - 修改后执行
nginx -t && systemctl reload nginx
IIS环境下特别注意事项
IIS的虚拟目录默认不继承父站点的PHP处理规则,极易出现No input file specified错误:
立即学习“PHP免费学习笔记(深入)”;
- 在IIS管理器中右键新建虚拟目录 → “转换为应用程序”(推荐)或手动配置
- 进入该虚拟目录的「处理程序映射」→ 点击「添加模块映射」
- 填入:
请求路径 *.php,模块 FastCgiModule,可执行文件 C:\php\php-cgi.exe - 确认物理路径不含中文、空格,且
IIS_IUSRS对该目录有读取+执行权限 - 检查
php.ini中cgi.fix_pathinfo=1已开启
通用验证与排错要点
无论哪种服务器,完成配置后务必验证以下几项:
- 在目标目录放一个
info.php,内容为<?php phpinfo(); ?>,通过URL访问看是否输出PHP信息页 - 测试静态文件(如
test.jpg)能否正常加载,排除权限或路径问题 - 遇到500错误,先查Web服务器错误日志(Apache的
error_log,Nginx的error.log) - 若页面空白但无报错,检查PHP是否启用了
display_errors,或查看php_errors.log - 上传功能异常?确认
uploads、cache等目录权限为755或775,且属主正确



















