Laravel:捕获路径不以api开头的所有路由

时间:2018-09-18 08:55:28

标签: laravel api vue.js

我使用this入门版Laravel + Vue SPA,其中在web.php中有这样的路由器:

Route::get('/{any}', 'SpaController@index')->where('any', '.*');

但是当我请求一个不存在URL的api时,我想通过以下方式返回响应

Route::fallback(function() {
    return response()->json(['message' => 'Not Found!'], 404);
});

这条路线不起作用,而是转到该路线:

Route::get('/{any}', 'SpaController@index')->where('any', '.*');

我了解我需要更改->where('any', '.*');,但不确定如何更改。

3 个答案:

答案 0 :(得分:1)

如果您想在laravel vue spa中显示404页面,请使用vue-router的404功能

vue路线应具有这样的路线

routes:[
    {path:'*',component:NotFound,name:'NotFound'},
...
]

NotFound组件可以设计为显示404页面。

如果您仍然希望使用后备路线,请将其放置在SPA路线上方。

Route::fallback(function() {
return response()->json(['message' => 'Not Found!'], 404);
});

Route::get('/{any}','SpaController@index')->where('any','.*');

答案 1 :(得分:0)

代替这个

Route::get('/{any}', 'SpaController@index')->where('any', '.*');

我用

Route::get('/{any}', 'SpaController@index')->where('any', '^(?!api).*$');

this answer帮助了我。

答案 2 :(得分:0)

我将get('/{any}'与where条件正则表达式('^(?!api\/)[\/\w\.-]*')结合使用:捕获除api路由之外的“ any”路由:

Route::get('/{any}', 'SpaController@index')->where('any', '^(?!api\/)[\/\w\.-]*');

因此,如果我调用任何不存在的API URL,都会出现laravel 404错误页面。