新增路由不生效大概率因路由缓存未更新:需先执行php artisan route:clear清除旧缓存,再执行php artisan route:cache重建,二者缺一不可;开发环境建议禁用路由缓存以避免频繁手动操作。

新增路由不生效,大概率是因为路由缓存没更新。Laravel 10 的 route:cache 会把所有路由编译成静态数组写入 bootstrap/cache/routes-v7.php(版本号可能略有差异),之后请求直接读这个文件,跳过原始路由定义。所以改了 routes/web.php 或 routes/api.php 后,必须手动清除再重建缓存。
先清旧缓存,再重新生成
执行这两步缺一不可:
-
php artisan route:clear —— 删除
bootstrap/cache/routes-*.php文件,让 Laravel 恢复动态加载路由 - php artisan route:cache —— 重新扫描全部路由文件,生成新的缓存文件
为什么不能只跑 route:cache?
直接运行 route:cache 不会覆盖旧缓存,也不会自动检测变更。它只是把当前注册的路由再写一遍——如果旧缓存还在,而你又没清掉,有些环境(尤其某些部署流程)可能仍加载旧文件。更关键的是:Laravel 不会在 route:cache 前自动检查是否已有缓存,也不提示冲突。
验证是否生效
清除并重建后,可以这样确认:
- 打开
bootstrap/cache/目录,确认routes-*.php文件修改时间是最新 - 访问你刚添加的路由 URL,看是否返回预期响应(不是 404)
- 在 Tinker 中运行
Route::getRoutes()->get('your.route.name'),确认能查到该路由
开发阶段建议关掉路由缓存
本地开发时,频繁改路由,没必要每次手动清+重缓存。可直接不运行 route:cache,或部署脚本里加判断:
if [ "$APP_ENV" = "production" ]; then php artisan route:cache; fi











