> Laravel 项目支持维护模式,也就是项目暂时不能访问,其方法很简单,本文针对此方法,进行扩展,允许用户访问特定页面,我们通过自定义中间件的方法来实现。 ### 命令行执行维护模式 //开启维护模式 php artisan down //关闭维护模式 php artisan up ### 使用 Artisan 命令 use Illuminate\Support\Facades\Artisan; //开启维护模式 Artisan::call('down'); //关闭维护模式 Artisan::call('up'); ### CheckForMaintenance.php Laravel 默认使用 `CheckForMaintenanceMode` 中间件判断网站是否处于维护模式并进行相应处理,该中间件的 `handle()` 方法定义如下: public function handle($request, Closure $next){ if ($this->app->isDownForMaintenance()) { throw new HttpException(503); } return $next($request); } 为了扩展代码,我们使用 `Artisan` 命令创建新的中间价来替代这一中间件: php artisan make:middleware CheckForMaintenanceMode 执行后会在 `app/Http/Middleware` 目录下生成一个 `CheckForMaintenance.php` 文件。 打开该文件,编辑其 `handle()` 方法如下: public function handle($request, Closure $next) { //维护模式下,后台可以登陆 if ($this->app->isDownForMaintenance() && !$request->is('admin*') && !$request->is('login*') && !$request->is('logout*')) { $data = json_decode(file_get_contents($this->app->storagePath().'/framework/down'), true); $data['message'] = 'sorry'; throw new MaintenanceModeException($data['time'], $data['retry'], $data['message']); } ////允许特定IP通过 //!in_array($request->getClientIp(), ['123.123.123.123', '124.124.124.124']) // return response('Be right back!', 503); return $next($request); } 上述代码中网址包含特定名的,和指定的 IP 地址时,即使在网站处于维护模式,依然可以访问网站。 接下来我们只需要将 Laravel 默认的 `CheckForMaintenanceMode` 中间件替换成我们刚刚创建的中间件即可。打开 `app/Http/Kernel.php` 将如下这行代码: Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class 替换成: App\Http\Middleware\CheckForMaintenanceMode::class 好了,大功告成,去试试看是否OK吧。当然,你需要将代码中的 IP 替换成你自己的 IP,为了方便修改,还可以将这些 IP 地址放到配置文件中。 参考网址:[http://laravelacademy.org/post/2496.html](http://laravelacademy.org/post/2496.html "http://laravelacademy.org/post/2496.html")