Laravel: поймать все маршруты, где путь не начинается с API - PullRequest
0 голосов
/ 18 сентября 2018

Я использую это стартер Laravel + Vue SPA, где у меня есть такой маршрутизатор в web.php:

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

Но когда я делаю запрос на API с несуществующим URL, я хотел бы вернуть ответ через

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

Этот маршрут не работает и вместо него запрос идет по этому маршруту:

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

Я понимаю, что мне нужно изменить ->where('any', '.*');, но не знаю, как.

Ответы [ 3 ]

0 голосов
/ 18 сентября 2018

Вместо этого

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

Я использую

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

Мне помог этот ответ .

0 голосов
/ 29 ноября 2018

Я использую get('/{any}' вместе с регулярным выражением условия where ('^(?!api\/)[\/\w\.-]*'): чтобы поймать «любой» маршрут, кроме маршрута API:

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

поэтому, если я позвоню по любому несуществующему URL-адресу API, я получу страницу с ошибкой laravel 404.

0 голосов
/ 18 сентября 2018

Если вы хотите отобразить страницу 404 в laravel vue spa, используйте функцию 404 vue-router

. Маршруты 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','.*');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...