У меня есть рабочий маршрут как
Route::get('/{url}', 'Controller@view)->name('view')->where('url', '[\w\d\-]+(.*)');
Это отлично работает и показывает страницу, как показано ниже (просто демонстрационная страница):

У меня есть ссылка на этой странице для размещения заказа, и я хочу создать маршрут как
Route::get('/{url}/order', 'Controller@order)->name('order')->where('url', '[\w\d\-]+(.*)');
Просмотр Blade
<a href = "{{ route('order', $product['url']) }}">Order Now</a>
php artisan route:list
| | GET|HEAD | {slug} | view | App\Http\Controllers\Controller@view | web |
| | GET|HEAD | {slug}/order | order | App\Http\Controllers\Controller@order | web |
Каждый раз, когда я нажимаю на эту ссылку, Laravel возвращает Ошибка не найдена. В чем проблема? Я перезапустил сервер и проверил Mod_rewrite. Все хорошо.
@universal: покажите свою ценность для $ product ['url']
Решение @Taacoo сработало!
Я дам вам ответ, который вы можете принять, если хотите @universal






Я думаю, ты забыл 'в своем коде Измените свой код
Route::get('/{url}/order', 'Controller@order)->name('order')->where('url', '[\w\d\-]+(.*)');
к
Route::get('/{url}/order', 'Controller@order')->name('order')->where('url', '[\w\d\-]+(.*)');
Маршруты работают сверху вниз. Laravel ищет все, что соответствует указанному URL-адресу.
При использовании {{slugs}} или любых других параметров важно, чтобы вы поместили ключ с самым широким диапазоном в нижнюю часть ваших маршрутов.
Пример:
Route::get('/{url}', 'Controller@index);
Route::get('/{url}/order', 'Controller@order);
С этой настройкой. ВСЕ маршруты будут идти к вашему методу Controller @ index. Поскольку ваш {{url}} ловит все
При переключении 2 ваш более строгий маршрут сначала выполняется перед URL-адресом с очень широкими требованиями.
Для получения дополнительной информации проверьте документы laravel
Поменяйте положение ваших 2 маршрутов.
{slug}/orderпереходит к{{slug}}, потому что он соответствует требованиям. Если вы переместите порядок выше обычного слага, он должен сработать