Как на одном уровне вложенности url обрабатывать различные данные?
Использовать префиксы:
Route::get('/page-{page}', 'Frontend\PageController@index');
Route::get('/catalog-{catalog}', 'Frontend\CatalogController@index');
Route::get('/catalog-{catalog}/{filters?}', 'Frontend\CatalogController@filters');
Route::get('/catalog-{catalog}/product-{product}', 'Frontend\ProductController@index');
Так как выше только.... везде говорят о том что надо использовать множественные именования ресурсов но мне не нравится...

Route::get('/page/{page}', 'Frontend\PageController@index');
Route::get('/catalog/{catalog}', 'Frontend\CatalogController@index');
Route::get('/catalog/{catalog}/{filters?}', 'Frontend\CatalogController@filters');
Route::get('/catalog/{catalog}/product/{product}', 'Frontend\ProductController@index');

Именование сложных действий в REST API