Laravel路由404错误:本地Windows正常,Linux虚拟主机报错求助
解决Windows正常、Linux下路由404的问题
这个问题的核心原因是Linux文件系统是大小写敏感的,而Windows不是,再加上路由和链接代码里的几个小错误,才导致部署到Linux后出现404。下面是具体的修复步骤:
1. 修正路由中的控制器名称错误
看你的路由代码:
Auth::routes(); Route::get('/curries','CurriessController@index')->name('curries'); Route::resource('/curries','CurriesController');
第一条路由里的CurriessController多了一个s!在Windows下,系统会忽略大小写和拼写的细微差异,能找到对应的CurriesController.php文件,但Linux会严格匹配文件名,找不到CurriessController.php就会返回404。把它改成正确的CurriesController即可:
Auth::routes(); Route::get('/curries','CurriesController@index')->name('curries'); Route::resource('/curries','CurriesController');
另外,其实Route::resource已经包含了index方法的路由,你可以考虑删掉重复的Route::get('/curries',...),避免路由冲突。
2. 修正视图中的链接路由
你尝试的route('curry.index', $curry->id)有两个问题:
- 资源路由生成的单个资源展示路由名是
curries.show(不是curry.index) - 传递参数的方式不对,正确的写法应该是:
或者手动传递id参数:<td><a href="{{ route('curries.show', $curry) }}">{{ $curry->curry_title }}</a></td><td><a href="{{ route('curries.show', ['curry' => $curry->id]) }}">{{ $curry->curry_title }}</a></td>
3. 确认控制器文件命名正确
确保你的控制器文件名为CurriesController.php,Linux下文件名的大小写必须和路由里的控制器名完全一致——比如不能写成curriescontroller.php或者Curriescontroller.php,否则系统会找不到文件。
4. 清除Linux服务器上的路由缓存
部署到Linux后,运行以下命令清除路由缓存,确保新的路由生效:
php artisan route:clear
做完这些步骤后,你的路由应该就能在Linux环境下正常工作了。
内容的提问来源于stack exchange,提问作者user1783675
相关产品推荐
相关产品推荐

