
当 Laravel 的 public 目录被部署在 public_html/myapp 下,而核心代码位于 web/ 目录时,需修正 index.php 中的相对路径,将 ../web/ 改为 ../../web/,使 autoload.php 和 app.php 能被正确加载。
当 laravel 的 `public` 目录被部署在 `public_html/myapp` 下,而核心代码位于 `web/` 目录时,需修正 `index.php` 中的相对路径,将 `../web/` 改为 `../../web/`,使 `autoload.php` 和 `app.php` 能被正确加载。
在共享主机环境中部署 Laravel 应用时,因无法直接修改 Web 服务器根目录(如 Apache 的 DocumentRoot),常采用“分离式部署”:将框架核心文件(app/、bootstrap/、vendor/ 等)置于非公开目录(如 /home/killestone/web/),仅把 public/ 目录暴露给 Web 访问(如放在 /home/killestone/public_html/myapp/)。此时关键在于确保 public/index.php 中所有 require 路径能准确回溯至真实项目根目录。
原始 index.php 中使用的是:
require __DIR__.'/../web/vendor/autoload.php';
该路径试图从 public_html/myapp/ 上移一级进入 public_html/,再进入 web/ —— 但实际目录结构是:
/home/killestone/public_html/myapp/ ← 当前 __DIR__ /home/killestone/public_html/ ← ../ /home/killestone/web/ ← 需要抵达的目标(当前写法 ../web/ 实际指向 /home/killestone/public_html/web/,不存在)
正确路径应上移两级:__DIR__.'/../../web/,即:
- ../ → 到 public_html/
- ../../ → 到 /home/killestone/
- ../../web/ → 最终定位到 /home/killestone/web/
✅ 正确的 index.php 关键段落如下:
// 修改这两行:将 '../' 改为 '../../' require __DIR__.'/../../web/vendor/autoload.php'; $app = require_once __DIR__.'/../../web/bootstrap/app.php';
⚠️ 注意事项:
- 路径必须使用 __DIR__:避免硬编码绝对路径,保证可移植性;
- 检查文件权限与所有权:确保 Web 进程(如 nobody 或 apache)有权限读取 web/ 目录下的 vendor/ 和 bootstrap/;
- .env 文件位置:应放在 web/ 目录下(即 public_html/../web/.env),Laravel 默认从 bootstrap/app.php 所在目录向上查找;
- 缓存清理:修改后首次访问前,建议在 web/ 目录下运行 php artisan config:clear 和 php artisan cache:clear(若 CLI 可用);
- 调试提示:若仍报错,可通过 echo __DIR__ . PHP_EOL; die(); 在 index.php 开头临时验证当前执行路径。
通过精准调整相对路径层级,即可在不改动服务器配置的前提下,安全、清晰地完成 Laravel 多级子目录部署。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











