Laravel 10升级后主路由执行optimize/route:cache报405错误
Laravel 7→10 根路由缓存后405错误问题
问题场景
把 Laravel 7 升级到 Laravel 10 后遇到奇怪的路由缓存问题:
- 根路由配置:
Route::get('/', 'App\Http\Controllers\IndexController@index'); - 执行
php artisan optimize或php artisan route:cache后,访问首页直接返回405 Method Not Allowed - 执行
php artisan route:clear就能恢复,但只要再执行优化/缓存命令就又出问题 - 新增的非根路由比如
Route::get('/new_link', 'App\Http\Controllers\IndexController@index');,缓存后完全正常
解决办法
改用Laravel 8+标准路由写法
Laravel 8开始推荐使用控制器类名的语法,旧的字符串格式路由在缓存时可能出现解析异常,改成以下写法即可:// 先引入控制器类 use App\Http\Controllers\IndexController; // 定义路由 Route::get('/', [IndexController::class, 'index']);这是最大概率解决问题的方案,因为高版本Laravel路由缓存时,对根路由的字符串路径解析逻辑有变化。
检查冲突路由
排查所有路由文件(包括第三方包注册的隐式路由),看有没有其他HTTP方法的根路由定义(比如Route::post('/', ...)),缓存时路由匹配优先级会导致显式的GET路由被覆盖。清理残留缓存文件
手动删除bootstrap/cache目录下的所有缓存文件,再重新执行php artisan route:cache,避免旧版本缓存残留引发的解析错误。检查服务器配置
确认Nginx/Apache的重写规则是否正确将根路径请求转发到public/index.php,部分服务器配置在路由缓存后会对根请求的方法校验出现异常,比如误拦截GET请求为其他方法。
内容的提问来源于stack exchange,提问作者sql query
相关产品推荐
相关产品推荐

