你可能会希望在维护模式下你自己依然能够访问你的网站,其实这可以通过编写一个检查维护模式的中间件来实现该功能。
默认情况下,Laravel使用的是 \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class 中间件,这个我们可以在 /laravel/app/Http/Kernel.php 中看到。其中会触法 handle() 方法,该方法代码如下:
public function handle($request, Closure $next) { if ($this->app->isDownForMaintenance()) { throw new HttpException(503); } return $next($request); }
我们可以通过自定义一个中间件来替换该中间件。
运行命令 php artisan make:middleware CheckForMaintenanceMode
,该命令会生成文件 app/Http/Middleware/CheckForMaintenance.php 。
打开该文件并修改其中的 handle() 方法使其满足你的要求,如:
public function handle($request, Closure $next) { if ($this->app->isDownForMaintenance() && !in_array($request->ip(), ['123.123.123.123', '124.124.124.124'])) { return response('Be right back!', 503); } return $next($request); }
其中的IP数组即为白名单,不管是否处于维护模式,数组中的IP都可以访问网站。
剩下的就是把我们自定义的维护模式中间件替换Laravel自带的中间件了,打开 app/Http/Kernel.php ,并把其中的
Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class
替换为:
App\Http\Middleware\CheckForMaintenanceMode::class
完成上面的步骤即可实现维护模式下的白名单功能了,希望能够帮到你。
英文原文:toniperic.com