Laravel - 维护模式仅适用于某些网址

时间:2015-06-01 11:53:48

标签: php laravel laravel-5

我需要使用artisan命令Maintenance mode来使用"down",但仅限某些网址...

在我的情况下,我希望以"/admin/*"开头的所有网址继续有效。

有解决方案吗?

4 个答案:

答案 0 :(得分:2)

看看app/http/middleware/CheckForMaintananceMode.php 有一个URI数组:

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode as Middleware;

class CheckForMaintenanceMode extends Middleware
{
    /**
     * The URIs that should be reachable while maintenance mode is enabled.
     *
     * @var array
     */
    protected $except = [
        //
    ];
}

答案 1 :(得分:1)

@lukasgeiter建议我创建了一个测试我的网址的中间件... 那是我的代码:

<?php namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\RedirectResponse;

class Maintanance {
    public function handle($request, Closure $next){
        if($request->is('admin*') || $request->is('maintanance')){
            return $next($request);
        }else{
            return new RedirectResponse(url('/maintanance'));
        }
    }
}

之后我创建了一个显示维护视图的route

Route::get('maintanance', function(){
    return view('errors.503');
});

现在我可以调用命令"up"并且应用程序仍处于维护状态,但是/admin网址...

答案 2 :(得分:0)

之前我做过类似的事情,但没有使用php artisan down命令。

内核在加载应用程序之前所做的第一件事就是检查您的站点是否处于维护模式。

因此,您将无法通过php artisan down访问您的控制器甚至您的路线。

您可能想要执行自己的命令,例如php artisan softdown,它会在/ storage目录中的某个位置创建一个文件,该文件会告诉您的应用应用处于“软关闭”模式。当然,再制作一个名为softup

的人

然后,在您的路线中,您将使用IF检查所有前端路线,以检查文件是否存在。

如果是,则返回视图maintenance.blade.php。

答案 3 :(得分:0)

我还使用它来检查是否有任何网址细分是API,让这些网址正常运行。

public function handle($request, Closure $next) {
    if ($this->app->isDownForMaintenance() &&  !in_array($_SERVER['REMOTE_ADDR'],['192.168.240.18','127x.0.0.1'])) {

        /** if URL contains API, disable continue, don't keep maintenance */
        if(in_array('api',$request->segments())){
            return $next($request);
        }

        throw new HttpException(503);
    }

    return $next($request);
}