Laravel 7 404 路由超过 2 层时出现错误

我遇到了 Laravel 的有线问题,其中具有多个参数(强制/可选)的路由不起作用。

环境信息

  • 本地:Windows、XAMPP、PHP 7.3

  • 生产:Ubuntu 18.04、PHP 7.4

最初,我怀疑 .htaccess 文件有问题,但这似乎不是问题。这在我的本地上完美运行,但由于某种原因,这在 Ubuntu 服务器上不起作用。

下面的代码可以完美运行。

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');

请问有什么建议可以解决这个问题吗?


慕盖茨4494581
浏览 153回答 3
3回答

一只斗牛犬

我的第一个建议是将参数最多的路线放在顶部,例如: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');});为了更好的可读性...

慕少森

我无法详细说明为什么会发生这种特定情况,但是,匹配您的开发和生产环境应该可以在将来消除这些问题。家园 Laravel 团队提供的 Homestead vagrant box 是一个可靠的选择,并且有很好的文档记录。它是 Ubuntu 18.04 / 20.04 机器,可以配置许多附加组件。您可以使用文件中的一行轻松配置任何给定项目正在使用的 PHP 版本Homestead.yaml。Docker Docker 更先进一些,但配置方式非常灵活。它的容器设计允许您将一个项目的依赖关系与下一个项目隔离。这些设置并不困难(一两天内即可轻松完成),并且允许您几乎完美地复制生产环境。它将在那些“但它可以在我的机器上运行”的时刻提供巨大帮助!

函数式编程

更新我自己的问题,以便对其他人有所帮助。我想说这可能是某人(或至少是我)未能检查的最后一件事。我尝试列出服务器中的路由,但发现找不到我新添加的路由。php artisan route:list早些时候,我清除了缓存,重新启动了apache,但没有帮助。最后发现当路由被缓存且无法工作时,以下命令是一个救星。所以对我有用的事情是清除“路由”缓存。php artisan route:cache  php artisan route:clear
打开App,查看更多内容
随时随地看视频慕课网APP