Вы должны поставить статический маршрут перед другими маршрутами. Случается, что когда Laravel проверяет, какой маршрут использовать, когда вы идете в m/snes, он проверяет маршруты, пока не достигнет совпадения. Так что если у вас есть:
Route::get('/m/{game}', '[email protected]')->name('game');
Route::get('/m/{game?}', '[email protected]')->name('all');
Route::get('/m/snes', '[email protected]')->name('snes')
Laravel замечает, что первый маршрут действителен, так как м/SNES означает, что «SNES» может быть {игра} переменная.
Если поставить статический маршрут на вершине, однако:
Route::get('/m/snes', '[email protected]')->name('snes')
Route::get('/m/{game}', '[email protected]')->name('game');
Route::get('/m/{game?}', '[email protected]')->name('all');
как только он достигает его он замечает, что это совпадение. И если ваш предполагаемый URL-адрес был чем-то вроде m/n64, он продолжает поиск, пока не найдет совпадение (в этом случае это будет следующий маршрут в списке). Это распространенное сообщение о маршрутизации файлов, даже в проектах JS.