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
相关产品推荐
相关产品推荐

