如何解决Laravel 7 404路线超过2个级别时出错
Laravel面临一个有线问题,其中带有多个参数(强制/可选)的路由不起作用。
环境信息
- 本地:Windows,XAMPP,PHP 7.3
- 生产:Ubuntu 18.04,PHP 7.4
最初,我怀疑.htaccess文件有问题,但这似乎不是问题。 这在我的本地计算机上完美运行,但是由于某些原因,在Ubuntu Server上不起作用。
以下代码可以正常工作。
Route::any('route/me/','Tst@routeme');
但是,以下任何一项都不起作用:
Route::any('route/me/here/','Tst@routeme');
Route::any('route/me/here/{id?}','Tst@routeme');
Route::any('route/me/here/and/here','Tst@routeme');
请问我有什么建议可以解决此问题?
解决方法
我的第一个建议是将具有最多参数的路线放在顶部,例如:
Route::any('route/me/here/and/here','Tst@routeme');
Route::any('route/me/here/{id?}','Tst@routeme');
Route::any('route/me/here/','Tst@routeme');
更像是首先执行哪个路由匹配,因此从上到下最小参数路由最后匹配。
第二件事,我建议您将路线分组:
Route::prefix('route/me')->group(function () {
Route::get('here/and/here','Tst@routeme');
Route::get('here/{id?}','Tst@routeme');
Route::get('here','Tst@routeme');
});
提高可读性...
,我无法详细说明为什么会发生这种特殊情况,但是,匹配您的开发和生产环境应该可以在将来消除这些问题。
宅基地 Docs
Laravel团队提供的Homestead流浪者盒子是一个可靠的选择,并且有据可查。它是Ubuntu 18.04 / 20.04机器,可以配置许多附加组件。您可以通过Homestead.yaml
文件中的一行轻松配置任何给定项目使用的PHP版本。
Docker Docs
Docker稍微先进一些,但是在配置方式上非常灵活。它的容器设计使您可以将一个项目与下一个项目的依赖关系隔离开来。
这些设置并不那么困难(在一两天内即可轻松完成),并使您几乎完美地复制生产环境。
它将在那些“但是可以在我的机器上工作”的时刻极大地帮助您!
,更新我自己的问题,这样可能会对其他人有所帮助。
我会说这可能是某人(或至少我)未能检查的最后一件事。我试图列出服务器中的路由,但未找到新添加的路由。
php artisan route:list
之前,我清除了缓存,重新启动了Apache,但没有帮助。最终发现,当路由处于缓存状态且无法正常工作时,以下命令可以节省生命。 所以对我有用的是-清除“路由”缓存。
php artisan route:cache
php artisan route:clear
衷心感谢@ Spholt,@ Akbar khan,@ Spholt,@ Gzai Kun的帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。