Laravel api 尝试从控制器调用方法时出现 404
Laravel api 404 when try to call method from controller
我在服务器上部署了 Laravel
中的应用程序。当我尝试在 Postman
中调用 POST
时:
http://api.mydomain.com/api/auth/signin
我收到错误 404 not found
。
在文件 RouteServiceProvider
中,我评论了网络部分:
public function boot()
{
$this->configureRateLimiting();
$this->routes(function () {
Route::prefix('api')
->middleware('api')
->namespace($this->namespace)
->group(base_path('routes/api.php'));
/*
Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/web.php'));
*/
});
}
当我有未注释的 web 部分并从 Postman 发送 GET
但没有任何后缀时,只有域:api.mydomain.com/ 它有效。
现在我评论了 web 并且只有 API 部分并且对 API 方法的任何请求都不起作用。
我的控制器:
class JwtAuthController extends Controller
{
//
public function __construct() {
$this->middleware('auth:api', ['except' => ['login', 'register']]);
}
/**
* Get a JWT via given credentials.
*/
public function login(Request $request){
...
}
在 api.php
文件中:
Route::group([
'middleware' => 'api',
'prefix' => 'auth'
], function ($router) {
Route::post('/signin', [JwtAuthController::class, 'login']);
}
php artisan route:list
的结果:
| App\Http\Middleware\Authenticate:api |
|
| POST
| api/auth/signin
| generated::1YOyMAVvTTnBZtym
| App\Http\Controllers\JwtAuthController@login
| api
在我的本地机器上,它可以工作,但是当我将它部署到服务器上时,它就不能工作了。
未找到,因为您没有添加子域api
,修复它
您可以从 url 中删除 api.
,就像这样 http://exmaple.com/api/auth/signin
或
您可以将子域添加到 RouteServiceProvider
那样
Route::middleware('api')
->prefix('api')
->domain('api.exmaple.com') // <-
->namespace($this->namespace)
->group(base_path('routes/api.php'));
我在服务器上部署了 Laravel
中的应用程序。当我尝试在 Postman
中调用 POST
时:
http://api.mydomain.com/api/auth/signin
我收到错误 404 not found
。
在文件 RouteServiceProvider
中,我评论了网络部分:
public function boot()
{
$this->configureRateLimiting();
$this->routes(function () {
Route::prefix('api')
->middleware('api')
->namespace($this->namespace)
->group(base_path('routes/api.php'));
/*
Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/web.php'));
*/
});
}
当我有未注释的 web 部分并从 Postman 发送 GET
但没有任何后缀时,只有域:api.mydomain.com/ 它有效。
现在我评论了 web 并且只有 API 部分并且对 API 方法的任何请求都不起作用。
我的控制器:
class JwtAuthController extends Controller
{
//
public function __construct() {
$this->middleware('auth:api', ['except' => ['login', 'register']]);
}
/**
* Get a JWT via given credentials.
*/
public function login(Request $request){
...
}
在 api.php
文件中:
Route::group([
'middleware' => 'api',
'prefix' => 'auth'
], function ($router) {
Route::post('/signin', [JwtAuthController::class, 'login']);
}
php artisan route:list
的结果:
| App\Http\Middleware\Authenticate:api |
|
| POST
| api/auth/signin
| generated::1YOyMAVvTTnBZtym
| App\Http\Controllers\JwtAuthController@login
| api
在我的本地机器上,它可以工作,但是当我将它部署到服务器上时,它就不能工作了。
未找到,因为您没有添加子域api
,修复它
您可以从 url 中删除 api.
,就像这样 http://exmaple.com/api/auth/signin
或
您可以将子域添加到 RouteServiceProvider
那样
Route::middleware('api')
->prefix('api')
->domain('api.exmaple.com') // <-
->namespace($this->namespace)
->group(base_path('routes/api.php'));