You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 03:12:38