laravel首页404主因是web服务器未正确转发请求至public/index.php:需确认nginx的root指向public目录、try_files含/index.php?$query_string、apache的allowoverride为all且.htaccess在public下,同时检查php扩展与权限。

首页 404,基本不是 Laravel 路由或代码问题,而是 Web 服务器根本没把请求正确转发到 public/index.php —— 先检查这个环节。
nginx 配置里 root 指向 public 目录了吗?
这是最常被忽略的点。Laravel 必须让 Web 服务器以 public/ 为文档根目录,而不是项目根目录(比如 /var/www/myapp)。否则所有请求都找不到 index.php,直接 404。
-
root指令必须明确指向public子目录,例如:root /var/www/myapp/public; - 如果写成
root /var/www/myapp;,即使加了try_files,$uri也会去项目根下找index.php,而它实际在public/里,必然失败 - 宝塔、phpstudy 等面板用户,特别注意「网站根目录」设置项——要填到
public,不是项目文件夹
nginx 的 try_files 指令写对了吗?
错误的 try_files 是首页 404 的第二大原因。常见错法是漏掉 /index.php?$query_string 或写成 =404 结尾。
- 必须包含这行:
try_files $uri $uri/ /index.php?$query_string; - 如果配置里有
try_files $uri $uri/ =404;,务必注释或删掉——它会直接拦截所有非静态资源请求 - 不要写成
/public/index.php:Nginx 的root已经定位到public,路径里再写public就变成public/public/index.php,当然 404 - 确保
index指令包含index.php:index index.php index.html index.htm;
Apache 下 .htaccess 是否生效?
Apache 默认不读取 .htaccess,首页 404 往往是因为重写规则根本没跑起来。
- 确认
mod_rewrite已启用:LoadModule rewrite_module modules/mod_rewrite.so前面不能有# - 对应
<directory></directory>块中,AllowOverride必须是All,不能是None或FileInfo -
.htaccess文件必须放在public/目录下(不是项目根),内容要完整,尤其不能漏掉RewriteEngine On - 如果用的是虚拟主机配置而非
.htaccess,那就直接在<directory></directory>里写重写规则,避免依赖文件读取
PHP 扩展和权限问题容易被当成“路由故障”
某些情况下,首页 404 实际是 PHP 报错被 Nginx/Apache 当作 404 处理(比如没开 openssl,Laravel 启动阶段就挂了)。
- 检查
php -m | grep openssl,确保openssl扩展已启用(Laravel 12+ 强依赖) - 确认
public/index.php可读、可执行,且所在目录(及storage/、bootstrap/cache/)权限合理(如755和644,避免777) - 查看 Web 服务器错误日志(Nginx 的
error.log,Apache 的error_log),搜索FPM、Permission denied、failed to open stream等关键词,比看浏览器 404 有用得多
真正卡住的地方,往往不在 Laravel 自身,而在 Web 服务器是否把请求稳稳送到 public/index.php 这一步——只要这步没走通,后面所有路由、中间件、控制器都还没开始加载。











