Laravel中使用dingo/api持续出现404错误求助(附配置信息)
结合你给出的配置信息,我整理了几个最可能导致404错误的排查点:
缺失Dingo API服务提供者
你贴出的config/app.php服务提供者列表里,没有注册Dingo的核心服务提供者。必须添加这一行到providers数组中:Dingo\Api\Provider\LaravelServiceProvider::class,这是Dingo API能正常工作的基础,没注册的话框架根本识别不了它的路由规则。
路由定义方式错误
Dingo API不能用Laravel默认的Routefacade来定义路由,必须使用它自带的路由实例。你需要在routes/api.php(或者单独的Dingo路由文件)里这样写:$api = app('Dingo\Api\Routing\Router'); $api->version('v1', function ($api) { $api->get('test', function () { return response()->json(['message' => 'Hello Dingo!']); }); });如果还是用普通的
Route::get(),Dingo的路由规则不会生效,自然返回404。配置/路由缓存未清除
如果你之前运行过php artisan config:cache或者php artisan route:cache,修改.env或者路由文件后必须清除缓存才能生效:php artisan config:clear php artisan route:clear缓存会保留旧的配置和路由规则,导致新的设置不生效。
请求URL不符合配置规则
根据你的.env配置:API_PREFIX=api
API_VERSION=v1
正确的请求URL应该是http://你的域名/api/v1/你的接口路径,比如上面定义的test接口,要访问http://your-domain/api/v1/test。如果你的请求路径少了前缀或者版本号,肯定会返回404。服务器重写规则问题
如果是Apache服务器,确保开启了mod_rewrite模块,并且项目根目录的.htaccess文件包含Laravel默认的重写规则:<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews -Indexes </IfModule> RewriteEngine On # Handle Authorization Header RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # Redirect Trailing Slashes If Not A Folder... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} (.+)/$ RewriteRule ^ %1 [L,R=301] # Send Requests To Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>如果是Nginx,确保配置文件里有这一行:
try_files $uri $uri/ /index.php?$query_string;重写规则不正确的话,请求无法正确转发到Laravel的入口文件,也会返回404。
先按这个顺序排查,一般就能解决问题了。
内容的提问来源于stack exchange,提问作者Capping Zhang

