Laravel 9修改public目录名称及调整项目结构的实现步骤
Laravel 9 修改应用目录结构并替换默认public目录为public_html的分步指南
针对Laravel 9改用Vite替代Mix后,旧的public目录修改流程失效的问题,以下是适配Laravel 9的完整分步操作:
目标目录结构
项目根目录/ ├─ laravel-app/ # 存放所有Laravel核心文件(app、resources、storage、vendor、bootstrap等) └─ public_html/ # 原public目录重命名,存放前端入口、编译后的资源文件
分步操作
1. 调整物理目录结构
- 将原Laravel项目中除
public外的所有文件和目录,移动到新建的laravel-app目录中 - 将原
public目录重命名为public_html,放在项目根目录下(与laravel-app同级)
2. 修改public_html/index.php的路径引用
打开public_html/index.php,更新自动加载和应用实例的路径:
// 原代码 require __DIR__.'/../vendor/autoload.php'; $app = require_once __DIR__.'/../bootstrap/app.php'; // 修改后 require __DIR__.'/../laravel-app/vendor/autoload.php'; $app = require_once __DIR__.'/../laravel-app/bootstrap/app.php';
3. 配置Laravel核心的public路径绑定
打开laravel-app/bootstrap/app.php,在Application实例创建后,添加public路径的绑定:
$app = new Illuminate\Foundation\Application( $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__) ); // 添加这一行,指定public目录的实际路径 $app->bind('path.public', function() { return base_path('../public_html'); });
这一步是让Laravel框架本身识别到新的public目录位置,生成asset URL、存储临时文件等场景都会依赖这个配置。
4. 配置Vite插件的目录指向
打开laravel-app/vite.config.js,修改Laravel插件的配置,明确指定public目录:
import { defineConfig } from 'vite'; import laravel from 'laravel-vite-plugin'; export default defineConfig({ plugins: [ laravel({ input: [ 'resources/css/app.css', 'resources/js/app.js', ], publicDirectory: '../public_html', // 告诉Vite新的public目录位置 buildDirectory: 'build', // 保持默认编译输出目录,无需修改 }), ], });
旧流程失效的核心原因就在这里:Vite插件默认依赖Laravel的path.public,同时需要显式配置publicDirectory,否则会去默认的public/目录找hot文件,导致ENOENT错误。
5. 验证配置
- 运行
php artisan serve,访问测试地址确认应用正常加载 - 运行
npm run dev,此时Vite会在public_html/目录下生成hot文件,不再出现报错 - 运行
npm run build,检查public_html/build/目录是否生成了编译后的资源文件
6. 适配.env配置(可选)
如果你的域名直接指向public_html目录,确保.env里的APP_URL正确:
APP_URL=http://your-project-domain.test
内容的提问来源于stack exchange,提问作者Zephni
相关产品推荐
相关产品推荐

