一些背景:我遇到了硬盘故障,必须删除我的辅助驱动器并将其安装在新系统上才能再次访问我的项目。获得访问权限后,我必须重新设置我的环境。我正在 Windows 10 WSL Ubuntu 上运行 Apache2。我相信我已经正确重建了所有文件夹和文件权限,现在可以运行我的 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 artisan 路线:列出结果
+--------+-----------+-----------------------------------------+-----------------------------------+---------------------------------------------------------------------------+--------------+
| 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>
在最后一个用户发布了我的 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引导我找到解决方案。
我最近遇到了这个问题。就我而言,同一网络服务器上有 2 个不同的站点。我的希望是让 x.y.z 响应 api 请求,而 w.y.z 响应网络访问。看起来 w.y.z 对两者都有回应。
这是API.conf
ServerName api.domain.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/api/public
这是 DOMAIN.conf
ServerName www.domain.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/domain/public
我通过日志注意到域正在响应请求。