Laravel服务器执行down命令后无法通过Artisan命令重启的问题
问题原因与解决方案
问题根源
当你通过路由执行Artisan::call('down')后,Laravel进入维护模式,默认会拦截所有HTTP请求直接返回503错误。此时访问/Turn_Up_Desk2929时,请求还没走到你的路由逻辑,就被维护模式的中间件拦截了,自然无法触发up命令恢复网站。
解决方案
方案1:进入维护模式时指定允许访问的路由
修改停机路由,调用down命令时添加--allow参数,把恢复路由加入白名单:
Route::get('/shotdown_website', function () { // 允许恢复路由在维护模式下正常访问 Artisan::call('down', ['--allow' => '/Turn_Up_Desk2929']); return "Website Down successfully"; });
下次执行停机操作后,访问/Turn_Up_Desk2929就能正常触发up命令恢复网站。
方案2:修改维护模式中间件,永久放行恢复路由
如果不想每次停机都手动指定白名单,可以修改Laravel的维护模式中间件:
- Laravel 6及以上版本:找到
app/Http/Middleware/PreventRequestsDuringMaintenance.php(若不存在,可从框架核心目录复制一份到该路径),修改handle方法:
public function handle(Request $request, Closure $next) { if ($this->app->isDownForMaintenance() && !$request->is('Turn_Up_Desk2929')) { throw new MaintenanceModeException; } return $next($request); }
- Laravel 5.x版本:修改
app/Http/Middleware/CheckForMaintenanceMode.php的handle方法,逻辑同上。
临时恢复方法
如果当前网站已处于维护模式且无法访问恢复路由,直接在终端执行以下命令即可恢复:
php artisan up
内容的提问来源于stack exchange,提问作者Jamal Azizbeigi
相关产品推荐
相关产品推荐

