我使用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', '.*');
,但不确定如何更改。
答案 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错误页面。