Так должно работать, когда вы используете подстановочный знак, чтобы соответствовать всему.Поэтому, если вы поместите его в конец файла, и он будет использоваться в качестве запасного маршрута, что означает, что ничто над ним не должно совпадать, тогда он откатится к этому маршруту.Или вы можете использовать регулярное выражение, чтобы сопоставить имя пользователя с чем-то, что отличает его от других маршрутов, например:
Route::get('{username}', 'ProfileController@profile')
->name('profile.view')
->where('username', 'YOUR REGEX HERE');
Я бы выбрал тот, который вы показали, и он уже работает:
Route::get('profile/{username}', 'ProfileController@profile')
->name('profile.view');
// or
Route::get('user/{username}', 'ProfileController@profile')
->name('profile.view');