laravel路由404的根本原因是请求未进入public/index.php入口:开发环境用php artisan serve可秒解;正式环境必须确保服务器根目录指向public、apache启用allowoverride all及mod_rewrite、nginx配置try_files $uri $uri/ /index.php?$query_string。

Laravel 10 安装后路由返回 404,不是路由写错了,而是请求根本没进 Laravel 的入口文件。核心问题在于:Web 服务器没把 /about、/admin 这类路径交给 public/index.php 处理,导致 Laravel 路由系统完全没机会运行。
你访问的 URL 是否带了 /public/?
比如:
❌ http://localhost/myapp/public/about → 会 404
✅ http://localhost:8000/about(用 php artisan serve)或
✅ http://yourdomain.com/about(Nginx/Apache 根目录指向 myapp/public)
原因:带 /public/ 的 URL 让服务器直接在 public/ 目录下找 about 这个文件或子目录,而不是把请求转发给 index.php 去解析路由。
开发环境最简解法:用内置服务器
不用配 Apache/Nginx,一步到位:
- 进入项目根目录(含
artisan文件的那层) - 执行:
php artisan serve
- 访问
http://127.0.0.1:8000/about即可
这个命令自动把 public/ 设为文档根,并处理所有重写逻辑,90% 的新手 404 都靠它秒解。
正式环境必须检查三件事
✅ 文档根目录必须指向 public/
- Apache:
DocumentRoot "/path/to/your-app/public" - Nginx:
root /path/to/your-app/public;
不改这里,.htaccess或try_files全白搭。
✅ Apache 必须允许 .htaccess 覆盖
在虚拟主机配置里加:
<directory>
AllowOverride All
Require all granted
</directory>
并确认 mod_rewrite 已启用(httpd.conf 中 LoadModule rewrite_module 前无 #)。
✅ Nginx 必须用 try_files,禁用 rewrite
在 location / { } 块中只留这一行:
try_files $uri $uri/ /index.php?$query_string;
别写 rewrite ^/(.*)$ /index.php/$1 last; —— 容易丢参数、循环跳转。
代码和缓存也得过一遍
- 检查
routes/web.php里有没有 PHP 语法错误(比如大写的Return、漏分号),一出错整文件被跳过; - 清缓存(开发阶段必做):
php artisan optimize:clear
- 改完路由必须重启
php artisan serve(它不热更新); - 确保
.env里APP_ENV=local,避免意外启用生产级缓存。
不复杂但容易忽略。











