Maybe you can add a constructor to Kernel to manage $middleware stack :
<?php namespace App\Http;
use Illuminate\Routing\Router;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel {
public function __construct(Application $app, Router $router)
{
$url = \Illuminate\Http\Request::capture()->url();
// Change $middleware property depending on $url
parent::__construct($app, $router);
}
...
<?php
namespace App\Http\Middleware;
use Closure;
class ApiMiddleware
{
protected $except = [
'api/*'
];
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
foreach ($this->except as $except) {
if ($request->is($except)) {
config()->set('session.driver', 'array');
}
}
return $next($request);
}
}
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
class VerifyCsrfToken extends BaseVerifier
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
'api/*'
];
public function handle($request, Closure $next)
{
foreach ($this->except as $except) {
if ($request->is($except)) {
return $next($request);
}
}
return parent::handle($request, $next);
}
}