Laravel Nova 4部署在域名子目录下无法正常运行求助
解决Laravel Nova子目录部署的资源与路由问题
针对同一域名子目录下部署多个Laravel Nova应用时出现的资源加载错误、URL跳转异常问题,可通过以下步骤解决:
1. 配置资源加载的正确前缀
Nova默认使用根路径加载资源,导致子目录下资源路径缺失前缀:
- 先发布Nova静态资源到应用public目录:
php artisan nova:publish - 在
config/app.php中添加asset_url配置项:'asset_url' => env('APP_ASSET_URL', null), - 在对应应用的
.env文件中设置资源前缀(替换为你的子目录路径):APP_ASSET_URL=https://my-domain.com/apps/app-1 - 覆盖Nova布局视图:复制
vendor/laravel/nova/resources/views/layout.blade.php到resources/views/vendor/nova/layout.blade.php,将所有资源引用替换为asset()助手(替换原有的mix()或直接路径),例如:<!-- 原代码 --> <link rel="stylesheet" href="{{ mix('app.css', 'vendor/nova') }}"> <!-- 修改后 --> <link rel="stylesheet" href="{{ asset('vendor/nova/app.css') }}">
2. 修正Nova路由的前缀
Nova默认路由无前缀,导致表单提交、页面跳转指向根路径:
- 打开
app/Providers/NovaServiceProvider.php,修改routes方法为Nova路由添加子目录前缀:protected function routes() { $prefix = env('NOVA_PATH_PREFIX', 'nova'); Route::prefix($prefix) ->middleware(['web', 'nova']) ->group(function () { Nova::routes() ->withAuthenticationRoutes() ->withPasswordResetRoutes() ->register(); }); } - 在应用
.env中设置Nova路由的完整子目录前缀:NOVA_PATH_PREFIX=apps/app-1/nova - 修改
config/nova.php中的path配置,确保Nova内部生成URL时使用正确前缀:
对应'path' => env('NOVA_PATH', 'nova'),.env设置:NOVA_PATH=apps/app-1/nova
3. 清除缓存确保配置生效
修改配置和路由后,执行以下命令清除缓存:
php artisan config:cache php artisan route:clear
4. 验证服务器配置
确保Web服务器正确解析子目录的符号链接,示例Nginx配置片段:
location /apps/app-1/ { try_files $uri $uri/ /apps/app-1/index.php?$query_string; }
需确保服务器允许符号链接(Nginx开启symlinks支持,Apache开启FollowSymLinks)。
每个子目录下的Laravel应用需独立配置上述.env参数,对应各自的子目录路径,即可实现Nova在子目录下正常运行。
内容的提问来源于stack exchange,提问作者웃웃웃웃웃
相关产品推荐
相关产品推荐

