Laravel API请求404问题:localhost/api/units无法访问
Laravel API 请求返回Apache 404错误的解决方案
问题描述
基于Laravel构建API项目,已完成数据库配置、路由注册(执行php artisan route:list确认api/units路由已成功注册),但使用Postman请求http://localhost/api/units时,服务器返回Apache的404 HTML页面,而非Laravel的响应。
用户提供的关键配置信息
.env 文件内容
APP_NAME=SKYCENTRAL APP_ENV=local APP_KEY=base64:havtW5AahJjp4acK6Wg8PvRewVywLlwzjcp9xdA2NnQ= APP_DEBUG=true APP_TIMEZONE=UTC APP_URL=http://localhost DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=skycentral DB_USERNAME=root DB_PASSWORD=
api.php 路由文件
<?php use Illuminate\Http\Request; use Illuminate\Support\Facades\Route; use App\Http\Controllers\UnitController; Route::apiResource('units', UnitController::class);
UnitController index 方法
public function index() { return Unit::all(); }
路由列表(php artisan route:list输出)
GET|HEAD / GET|HEAD api/units units.index › UnitController@index POST api/units units.store › UnitController@store GET|HEAD api/units/{unit} units.show › UnitController@show PUT|PATCH api/units/{unit} units.update › UnitController@update DELETE api/units/{unit} units.destroy › UnitController@destroy GET|HEAD sanctum/csrf-cookie sanctum.csrf-cookie › Laravel\Sanctum › CsrfCookieController@show GET|HEAD up
问题分析
返回Apache原生404页面,说明请求未进入Laravel的处理流程,核心原因是Apache的URL重写配置未正确生效,或者项目根目录指向错误,导致Laravel的入口文件index.php无法接收请求。
解决步骤
1. 启用Apache mod_rewrite模块
Windows(XAMPP/WAMP):
打开Apache配置文件httpd.conf,找到以下行并去掉开头的#:#LoadModule rewrite_module modules/mod_rewrite.so保存后重启Apache服务。
Linux:
执行命令启用模块:sudo a2enmod rewrite重启Apache:
sudo systemctl restart apache2
2. 配置Apache虚拟主机允许URL重写
在Apache的虚拟主机配置文件中,确保项目public目录的<Directory>块设置AllowOverride All,示例:
<Directory "/var/www/your-laravel-project/public"> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory>
修改后重启Apache。
3. 检查Laravel public目录下的.htaccess文件
确保public/.htaccess文件存在且内容正确,标准内容如下:
<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>
若文件缺失,可从Laravel官方仓库复制该文件到public目录。
4. 确认Apache网站根目录指向正确
确保Apache的网站根目录设置为Laravel项目的public文件夹,而非项目根目录。如果根目录指向项目根,请求会无法找到Laravel的入口文件,导致Apache返回404。
5. 清除路由缓存(可选)
执行以下命令清除路由缓存,确保路由配置生效:
php artisan route:clear
内容的提问来源于stack exchange,提问作者Osama El Emam
相关产品推荐
相关产品推荐

