Laravel 路由不生效(404)的快速排查与解决指南

新安装的 laravel 项目中自定义路由返回 404,且默认首页修改无效,通常是路由缓存未清除或语法错误导致;执行 `php artisan optimize:clear` 可一键清理缓存并使路由立即生效。

在 Laravel 中,路由定义后无法访问(如 /example 返回 404),甚至修改默认首页 Route::get('/', ...) 也不生效,这并非配置错误,而是 Laravel 8+ 默认启用的路由缓存机制在作祟——开发阶段若未主动清除缓存,框架会持续使用旧的路由快照,导致新增或修改的路由完全不被识别。

第一步:验证路由是否已注册
在项目根目录运行以下命令,查看当前生效的全部路由:

php artisan route:list

如果输出中没有 /example,说明路由未被加载(可能因语法错误、文件未保存或缓存干扰)。

⚠️ 关键陷阱:代码语法错误
你提供的示例中存在两个致命问题:

  • Return 首字母大写 → 应为小写 return(PHP 区分大小写)
  • Return ('hello') 缺少分号 → 正确写法为 return 'hello';

修正后的路由应为:

// routes/web.php
Route::get('/example', function () {
    return 'hello'; // ✅ 小写 return + 分号
});

第二步:强制清除所有缓存(推荐首选方案)
执行以下命令一次性清除路由、配置、视图等所有缓存:

php artisan optimize:clear
? 该命令等价于依次执行 route:clear, config:clear, view:clear, cache:clear,是 Laravel 8+ 推荐的开发环境缓存清理方式。

第三步:重启开发服务器(必要步骤)
php artisan serve 启动的服务不会自动重载路由文件。清除缓存后,必须重启服务:

# 先按 Ctrl+C 停止当前服务,再重新启动
php artisan serve

此时访问 http://127.0.0.1:8000/example 即可看到 'hello'。

? 额外提示:

  • 确保修改的是 routes/web.php(而非 api.php),因为 Web 路由需匹配 web 中间件组;
  • Windows 8.1 用户需确认 PHP 和 Composer 环境变量已正确配置,避免命令执行失败;
  • 若仍报错,请检查 APP_KEY 是否已生成(运行 php artisan key:generate);
  • 切勿在生产环境随意执行 optimize:clear,应使用 route:cache 提升性能。

通过以上三步(查路由 → 清缓存 → 重启服务),99% 的“路由不显示”问题可立即解决。记住:Laravel 开发中,artisan optimize:clear 是比反复检查语法更高效的排障起点。