首页 > 解决方案 > Laravel API 停止响应。如何恢复服务?

问题描述

一些背景:我遇到了一个 HD 故障,不得不移除我的辅助驱动器并将其安装在新系统上以再次访问我的项目。获得访问权限后,我不得不重新设置我的环境。我在带有 Apache2 的 Windows 10 WSL Ubuntu 上运行。我相信我已经正确重建了所有文件夹和文件权限,现在可以运行我的 Laravel API。

sudo chown -R www-data:www-data /path/to/your/laravel/root/directory
sudo usermod -a -G www-data ubuntu
sudo find /path/to/your/laravel/root/directory -type f -exec chmod 644 {} \;  
sudo find /path/to/your/laravel/root/directory -type d -exec chmod 755 {} \;
sudo chgrp -R www-data storage bootstrap/cache
sudo chmod -R ug+rwx storage bootstrap/cache

唯一的问题是我的 API 调用不再起作用。我收到一条 404 消息。唯一有效的路线是索引路线。

我已经尝试清除配置/缓存/视图/会话等并重建路由列表,但是当我尝试进行 API 调用时仍然遇到相同的 404 错误。

php artisan cache:clear
php artisan route:cache  
php artisan config:clear 
php artisan view:clear 

我什至无法让它返回带有测试 API 闭包的简单测试消息。

<?php

use Illuminate\Http\Request;

/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/

    Route::group(['prefix' => '/auth', ['middleware' => 'throttle:20,5']], function () {
        Route::post('/register', 'API\AuthController@register')->name('api.register');
        Route::post('/login', 'API\AuthController@login')->name('api.login');
    });

    // Route::get('/test',function(){
    //     return "Test api";
    // });

    Route::group(['middleware' => ['auth:api']], function () {

        Route::apiResources([
            'user' => 'API\UserController',
            'role' => 'API\RoleController',
            'user-role' => 'API\UserRoleController',
        ]);

        Route::post('auth/logout', 'API\AuthController@logout')->name('api.logout');
        Route::get('profile', 'API\UserController@profile')->name('api.profile');
        Route::put('profile', 'API\UserController@updateProfile')->name('api.profile.update');
    });

php工匠路线:列出结果

+--------+-----------+-----------------------------------------+-----------------------------------+---------------------------------------------------------------------------+--------------+
| Domain | Method    | URI                                     | Name                              | Action                                                                    | Middleware   |
+--------+-----------+-----------------------------------------+-----------------------------------+---------------------------------------------------------------------------+--------------+
|        | GET|HEAD  | /                                       | home                              | App\Http\Controllers\HomeController@index                                 | web          |
|        | POST      | api/auth/login                          | api.login                         | App\Http\Controllers\API\AuthController@login                             | api          |
|        | POST      | api/auth/logout                         | api.logout                        | App\Http\Controllers\API\AuthController@logout                            | api,auth:api |
|        | POST      | api/auth/register                       | api.register                      | App\Http\Controllers\API\AuthController@register                          | api          |
|        | PUT       | api/profile                             | api.profile.update                | App\Http\Controllers\API\UserController@updateProfile                     | api,auth:api |
|        | GET|HEAD  | api/profile                             | api.profile                       | App\Http\Controllers\API\UserController@profile                           | api,auth:api |
|        | POST      | api/role                                | role.store                        | App\Http\Controllers\API\RoleController@store                             | api,auth:api |
|        | GET|HEAD  | api/role                                | role.index                        | App\Http\Controllers\API\RoleController@index                             | api,auth:api |
|        | DELETE    | api/role/{role}                         | role.destroy                      | App\Http\Controllers\API\RoleController@destroy                           | api,auth:api |
|        | PUT|PATCH | api/role/{role}                         | role.update                       | App\Http\Controllers\API\RoleController@update                            | api,auth:api |
|        | GET|HEAD  | api/role/{role}                         | role.show                         | App\Http\Controllers\API\RoleController@show                              | api,auth:api |
|        | GET|HEAD  | api/user                                | user.index                        | App\Http\Controllers\API\UserController@index                             | api,auth:api |
|        | POST      | api/user                                | user.store                        | App\Http\Controllers\API\UserController@store                             | api,auth:api |
|        | POST      | api/user-role                           | user-role.store                   | App\Http\Controllers\API\UserRoleController@store                         | api,auth:api |
|        | GET|HEAD  | api/user-role                           | user-role.index                   | App\Http\Controllers\API\UserRoleController@index                         | api,auth:api |
|        | DELETE    | api/user-role/{user_role}               | user-role.destroy                 | App\Http\Controllers\API\UserRoleController@destroy                       | api,auth:api |
|        | PUT|PATCH | api/user-role/{user_role}               | user-role.update                  | App\Http\Controllers\API\UserRoleController@update                        | api,auth:api |
|        | GET|HEAD  | api/user-role/{user_role}               | user-role.show                    | App\Http\Controllers\API\UserRoleController@show                          | api,auth:api |
|        | GET|HEAD  | api/user/{user}                         | user.show                         | App\Http\Controllers\API\UserController@show                              | api,auth:api |
|        | PUT|PATCH | api/user/{user}                         | user.update                       | App\Http\Controllers\API\UserController@update                            | api,auth:api |
|        | DELETE    | api/user/{user}                         | user.destroy                      | App\Http\Controllers\API\UserController@destroy                           | api,auth:api |
|        | GET|HEAD  | oauth/authorize                         | passport.authorizations.authorize | Laravel\Passport\Http\Controllers\AuthorizationController@authorize       | web,auth     |
|        | DELETE    | oauth/authorize                         | passport.authorizations.deny      | Laravel\Passport\Http\Controllers\DenyAuthorizationController@deny        | web,auth     |
|        | POST      | oauth/authorize                         | passport.authorizations.approve   | Laravel\Passport\Http\Controllers\ApproveAuthorizationController@approve  | web,auth     |
|        | GET|HEAD  | oauth/clients                           | passport.clients.index            | Laravel\Passport\Http\Controllers\ClientController@forUser                | web,auth     |
|        | POST      | oauth/clients                           | passport.clients.store            | Laravel\Passport\Http\Controllers\ClientController@store                  | web,auth     |
|        | PUT       | oauth/clients/{client_id}               | passport.clients.update           | Laravel\Passport\Http\Controllers\ClientController@update                 | web,auth     |
|        | DELETE    | oauth/clients/{client_id}               | passport.clients.destroy          | Laravel\Passport\Http\Controllers\ClientController@destroy                | web,auth     |
|        | GET|HEAD  | oauth/personal-access-tokens            | passport.personal.tokens.index    | Laravel\Passport\Http\Controllers\PersonalAccessTokenController@forUser   | web,auth     |
|        | POST      | oauth/personal-access-tokens            | passport.personal.tokens.store    | Laravel\Passport\Http\Controllers\PersonalAccessTokenController@store     | web,auth     |
|        | DELETE    | oauth/personal-access-tokens/{token_id} | passport.personal.tokens.destroy  | Laravel\Passport\Http\Controllers\PersonalAccessTokenController@destroy   | web,auth     |
|        | GET|HEAD  | oauth/scopes                            | passport.scopes.index             | Laravel\Passport\Http\Controllers\ScopeController@all                     | web,auth     |
|        | POST      | oauth/token                             | passport.token                    | Laravel\Passport\Http\Controllers\AccessTokenController@issueToken        | throttle     |
|        | POST      | oauth/token/refresh                     | passport.token.refresh            | Laravel\Passport\Http\Controllers\TransientTokenController@refresh        | web,auth     |
|        | GET|HEAD  | oauth/tokens                            | passport.tokens.index             | Laravel\Passport\Http\Controllers\AuthorizedAccessTokenController@forUser | web,auth     |
|        | DELETE    | oauth/tokens/{token_id}                 | passport.tokens.destroy           | Laravel\Passport\Http\Controllers\AuthorizedAccessTokenController@destroy | web,auth     |
+--------+-----------+-----------------------------------------+-----------------------------------+---------------------------------------------------------------------------+--------------+

显然我一定错过了一些东西,但我无法弄清楚是什么。如果有人对我如何解决这个问题有任何想法并让我不必重建我的整个项目,那将会很有帮助。

谢谢。

更新

正如另一个用户问的那样,这是我的 apache2.config 设置的

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

标签: phpjsonlaravelapilaravel-5.8

解决方案


在最后一个用户发布了我的 apache 配置后,我决定查看 apache 的站点可用配置

 sudo nano /etc/apache2/sites-available/000-default.conf

我已将 AllowOverride 更改为 all,API 调用现在似乎正在工作。

<Directory  /mnt/d/Dropbox/www/html/public/>
        Options Indexes FollowSymLinks
        AllowOverride all
        Require all granted
</Directory>

感谢@lagbox 引导我找到解决方案。


推荐阅读