为了测试需要,有时候需要在网站处于维护模式下允许特定IP访问网站,在 Laravel 中,这可以通过为维护模式编写自定义中间件来实现。
默认情况下,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() && !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 地址放到配置文件中。