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

Laravel 8/9 Nginx子目录部署时API路由返回404如何解决

Laravel 8/9 子目录部署Nginx配置404修复方案

该问题由Nginx配置语法错误+Laravel未适配子目录根路径共同导致,以下是可直接落地的修复步骤,全版本兼容Laravel 8、9:


1. 修正Nginx站点配置

你原有配置存在3处语法错误,直接替换为以下配置即可:

location /mobilku {
    # 修正1:补全alias路径开头的/,路径必须指向Laravel的public目录
    alias /var/www/html/mobilku/public;
    # 修正2:try_files回退路径必须带上子目录前缀,补全查询参数拼接符
    try_files $uri $uri/ /mobilku/index.php?$query_string;

    location ~ \.php$ {
        # 修正3:补全snippets路径的复数s,原配置路径拼写错误
        include snippets/fastcgi-php.conf;
        fastcgi_param SCRIPT_FILENAME $request_filename;
        # 新增:指定入口文件的子目录路径,避免PHP拿到错误的请求URI
        fastcgi_param SCRIPT_NAME /mobilku/index.php;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    }
}

配置修改完成后执行以下命令校验并重载Nginx:

nginx -t
# 校验输出successful后执行重载
systemctl reload nginx

2. 调整Laravel子目录适配配置

2.1 修改应用根URL

打开项目根目录下的.env文件,修改APP_URL配置项为带子目录的完整地址:

APP_URL=http://你的实际域名/mobilku

2.2 强制根URL生效

打开app/Providers/AppServiceProvider.php,在boot方法中新增一行配置,强制所有生成的URL带上子目录前缀:

public function boot()
{
    // 新增以下行
    \URL::forceRootUrl(config('app.url'));
}

2.3 清理缓存

进入项目根目录,执行命令清理路由和配置缓存:

php artisan route:clear
php artisan config:clear

3. 访问路径说明

根据你路由定义的位置,正确的API访问路径如下:

  • 如果car路由组定义在routes/api.php文件中:默认会自动带/api前缀,完整访问路径为http://你的域名/mobilku/api/car/xxx
  • 如果car路由组定义在routes/web.php文件中:完整访问路径为http://你的域名/mobilku/car/xxx

常见踩坑排查

  • 禁止在alias配置的路径末尾加/,否则会出现路径拼接重复导致404
  • 不要用root指令替换alias做子目录映射,root会自动拼接location路径,导致无法正确指向public目录
  • 如果仍返回403,检查/var/www/html/mobilku目录权限,确保www-data用户拥有目录读权限
  • 如果接口返回404但Nginx访问日志状态码为200,说明是Laravel路由匹配失败,检查是否漏写路径前缀、是否未执行路由缓存清理

内容的提问来源于stack exchange,提问作者Mr Alexander Ws

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 02:28:04