关键在于Web服务器将URL路径(如/second)映射到独立项目public目录,Apache用Alias+Directory配对配置,Nginx用location alias+正确SCRIPT_FILENAME;须确保入口为public、PHP扩展兼容、runtime目录独立可写。

把第二个PHP项目挂到主站虚拟目录下,关键不是“复制项目进去”,而是让Web服务器把某个URL路径(比如 /admin 或 /api)映射到另一个独立项目的物理目录,同时不干扰主站运行。不同服务器配置方式不同,但核心逻辑一致:路径隔离、入口统一、权限可控。
Apache:用 Alias + Directory 精确映射
适合宝塔、小皮、自建 Apache 环境。不能只写 Alias,必须配对 <directory></directory> 块,否则 403 或伪静态失效:
- 在主站的虚拟主机配置中(如
vhost.conf),添加:Alias /second /var/www/second-project/public <Directory "/var/www/second-project/public"> Options FollowSymLinks AllowOverride All Require all granted </Directory> - 确保
/var/www/second-project/public下有正确的.htaccess(ThinkPHP/Laravel 等框架需标准重写规则) - 确认
mod_alias和mod_rewrite已启用(宝塔面板 → Apache 设置 → 模块管理里勾选) - 重启 Apache(不是重载),否则配置不生效
Nginx:用 location alias + 正确拼接 SCRIPT_FILENAME
Nginx 没有 .htaccess,所有逻辑靠配置驱动。最易出错的是 fastcgi_param SCRIPT_FILENAME 的写法:
- 在主站 server 块内添加:
location /second/ { alias /var/www/second-project/public/; <pre class="brush:php;toolbar:false;">location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/tmp/php-cgi.sock; # 根据实际 PHP-FPM 地址调整 fastcgi_param SCRIPT_FILENAME $request_filename; }}
立即学习“PHP免费学习笔记(深入)”;
- 注意:
alias末尾必须带斜杠,$request_filename才能正确解析为/var/www/second-project/public/index.php - 切勿写成
$document_root$fastcgi_script_name—— 这会把路径拼成/var/www/html/second/index.php,导致 404
通用注意事项
无论 Apache 还是 Nginx,以下三点必须检查:
-
入口目录必须是 public/:第二个项目也应遵循现代框架规范(如 TP6、Laravel),Web 服务器只指向其
public/子目录,避免app/、config/、.env被直接访问 -
PHP 扩展与版本兼容:主站和第二个项目共用同一 PHP 版本(如 PHP 8.1),需确认双方依赖的扩展(如
fileinfo、mbstring、pdo_mysql)均已启用 -
runtime 目录可写且独立:第二个项目的
runtime/(或storage/)不能与主站混用,需单独设权限:chown -R www-data:www-data /var/www/second-project/runtime,并设chmod -R 755
挂载后,访问 https://yoursite.com/second/ 即可进入第二个项目,它完全独立于主站路由和配置,互不干扰。



















