如何从 Lumen 路由器中的 "any" 路由中排除“/api”(每个正则表达式)?

How to exclude "/api" from "any"-route in Lumen router (per regex)?

我的 Lumen 路由器有问题 (web.php): 我的项目包括 vue.js 和 vue 路由器,所以我想将所有路由指向路由器,确实工作正常。

$router->get('{path:.*}', function () {
    return view('app');
});

我的问题是:我还有一些 api 路由,由 Lumen/controllers:

处理
$router->group(['prefix' => 'api'], function ($router) {
    $router->group(['prefix' => 'authors'], function ($router) {
        $router->get('/', 'AuthorController@showAllAuthors');
        $router->get('/id/{id}', 'AuthorController@showAuthorById');
    });
});

好吧,路线 localhost/api/authors 运行良好。 但是 localhost/api/authors/1 returns 应用程序..

我正在考虑为 vue 路由设置一个例外:

$router->get('{path:^(?!api).*$}'

..但这将导致 NotFoundHttpException。 正则表达式有问题吗? 它应该排除所有以 /api.

开头的路由

你真的很接近。正则表达式出现在 laravel 的路由中的 get/post 语句之后。像这样:

$router->get('/{catch?}', function () { 
    return view('app'); 
})->where('catch', '^(?!api).*$');

以下是供参考的文档: https://laravel.com/docs/5.8/routing#parameters-regular-expression-constraints

编辑:Lumen 具体问题应在组前缀中解决。

$router->get('/{route:.*}/', function () { 
    return view('app'); 
});