Я разработал веб-приложение с интерфейсом React и Laravel для API без сохранения состояния.
Я хотел бы получить доступ к интерфейсу с URL-адресом «http://localhost/my-application» и к API-интерфейсу серверной части с URL-адресом «http://localhost/api/my-application/».
Я создал папку «www/api/my-application» и поместил сюда символическую ссылку на общедоступный index.php моего бэкэнда Laravel.
Проблема в том, что для вызова API мне нужно указать URL-адрес «http://localhost/api/my-application/api/login».
Как вы можете видеть, мне пришлось повторить «/api», потому что API Laravel имеют этот URL-адрес по умолчанию. Кроме того, если я попытаюсь получить доступ только к «http://localhost/api/my-application/», я получу страницу с ошибкой сервера 500, и в журнале будет написано:
ОШИБКА: Представление [приветствие] не найдено. {"исключение":"[объект] (InvalidArgumentException(код: 0): представление [приветствие] не найдено.
Это потому, что он пытается получить доступ к представлению. Но у меня нет никаких представлений, я бы хотел, чтобы в моем проекте Laravel были только API.
Как очистить проект, чтобы мне просто нужно было получить доступ к «http://localhost/api/my-application/» для доступа к API? Таким образом, API «входа» должен быть здесь: «http://localhost/api/my-application/login», а не здесь «http://localhost/api/my-application/api/login».






Вы можете сделать это так, как указано в комментарии:
$router->group(['prefix' => '/api/v1'], static function (Router $router): void {
...
$router->get('login', [AccessController::class, 'show']);
...
});
Изменить префикс маршрутов можно в RouteServiceProvider.php
Из этого
$this->routes(function () {
Route::middleware('api')
->prefix('api')
->group(base_path('routes/api.php'));
Route::middleware('web')
->group(base_path('routes/web.php'));
});
К этому
$this->routes(function () {
Route::middleware('api')
->group(base_path('routes/api.php'));
Route::middleware('web')
->prefix('web')
->group(base_path('routes/web.php'));
});
Таким образом вы удаляете префикс для маршрутов API и добавляете префикс web/ к веб-маршрутам.
Затем из вашего интерфейса просто нажмите конечную точку
http://localhost/api/my-application/login
Кроме того, вы можете попробовать удалить промежуточное программное обеспечение web Route от поставщика, чтобы отключить его.
Большое спасибо за решение. Я удалил ->prefix('api') и удалил веб-вызов промежуточного программного обеспечения.
Если вы используете более старый шаблон laravel (v10 и ранее), у вас должен быть этот файл, и вы можете удалить из него строку
prefix('api')(вы не собираетесь использовать веб-маршруты, поэтому это не должно быть проблемой) .