You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 09:40:29