Маршрут внутри группы префиксов выдает ошибку 404 [дубликат]Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Маршрут внутри группы префиксов выдает ошибку 404 [дубликат]

Сообщение Anonymous »

Я использую Laravel 11.27.2 и PHP 8.2 и заметил, что некоторые маршруты внутри группы префиксов выдают ошибку 404. >, но если я попытаюсь переместить маршрут за пределы группы префиксов, маршрут волшебным образом заработает без каких-либо ошибок.
Кроме того, если я также перенесу поврежденный маршрут поверх других маршрутов внутри группы префиксов, это сработает.< /p>
Я также попробовал команду php artisan Route:clear, но ничего не изменилось.
Вместо этого с помощью команды php artisan Route:list маршруты указаны правильно (список маршрутов).
Этот не работает:

Код: Выделить всё

Route::prefix('giveaway')->name('giveaway.')->group(function () {
Route::get('/{id}', [GiveawayController::class, 'show'])->name('show');
Route::post('/store/{id}', [GiveawayController::class, 'store'])->name('store');
Route::get('/thank-you', [GiveawayController::class, 'thankYou'])->name('thankYou');
Route::get('/terms-and-conditions/{id}', [GiveawayController::class, 'privacyAndTerms'])->name('termsAndConditions');
Route::get('/privacy-policy/{id}', [GiveawayController::class, 'privacyAndTerms'])->name('privacyPolicy');
Route::get('/history', [GiveawayController::class, 'index'])->name('history');
});
Это будет работать:

Код: Выделить всё

Route::prefix('giveaway')->name('giveaway.')->group(function () {
Route::get('/history', [GiveawayController::class, 'index'])->name('history'); //Changed position
Route::get('/{id}', [GiveawayController::class, 'show'])->name('show');
Route::post('/store/{id}', [GiveawayController::class, 'store'])->name('store');
Route::get('/thank-you', [GiveawayController::class, 'thankYou'])->name('thankYou');
Route::get('/terms-and-conditions/{id}', [GiveawayController::class, 'privacyAndTerms'])->name('termsAndConditions');
Route::get('/privacy-policy/{id}', [GiveawayController::class, 'privacyAndTerms'])->name('privacyPolicy');
});
Это тоже будет работать:

Код: Выделить всё

Route::prefix('giveaway')->name('giveaway.')->group(function () {
Route::get('/{id}', [GiveawayController::class, 'show'])->name('show');
Route::post('/store/{id}', [GiveawayController::class, 'store'])->name('store');
Route::get('/thank-you', [GiveawayController::class, 'thankYou'])->name('thankYou');
Route::get('/terms-and-conditions/{id}', [GiveawayController::class, 'privacyAndTerms'])->name('termsAndConditions');
Route::get('/privacy-policy/{id}', [GiveawayController::class, 'privacyAndTerms'])->name('privacyPolicy');
});

Route::get('/history', [GiveawayController::class, 'index'])->name('history'); //Outside the route group
Поврежденные маршруты: /history и /thank-you.
Я хотел бы выяснить, почему это происходит такая странная вещь.
Если поможет, я использую Apache в качестве HTTP-сервера, и это мой .htaccess:

Код: Выделить всё

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ /public/$1 [L,QSA]

# php -- BEGIN cPanel-generated handler, do not edit
# Set the “ea-php82” package as the default “PHP” programming language.

AddHandler application/x-httpd-ea-php82 .php .php8 .phtml

# php -- END cPanel-generated handler, do not edit
Я решил головоломку, проблема заключалась в маршруте '/{id}', где не было ограничения типа и, следовательно, будучи первым маршрутом в группе, он был выбран первым и не проверял, существуют ли другие маршруты.
РЕШЕНИЕ:
1. Переместить маршрут на последний в этом префиксе;
2. Добавьте ограничение с выражениями регулярных выражений на маршрут для параметра с помощью ->where();

Подробнее здесь: https://stackoverflow.com/questions/790 ... -404-error
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»