为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕盖茨4494581 2023-10-21 19:57:31
我遇到了 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');请问有什么建议可以解决这个问题吗?
查看完整描述

3 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

我的第一个建议是将参数最多的路线放在顶部,例如:


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

});

为了更好的可读性...


查看完整回答
反对 回复 2023-10-21
?
慕少森

TA贡献2019条经验 获得超9个赞

我无法详细说明为什么会发生这种特定情况,但是,匹配您的开发和生产环境应该可以在将来消除这些问题。


家园 

Laravel 团队提供的 Homestead vagrant box 是一个可靠的选择,并且有很好的文档记录。它是 Ubuntu 18.04 / 20.04 机器,可以配置许多附加组件。您可以使用文件中的一行轻松配置任何给定项目正在使用的 PHP 版本Homestead.yaml

Docker 

Docker 更先进一些,但配置方式非常灵活。它的容器设计允许您将一个项目的依赖关系与下一个项目隔离。


这些设置并不困难(一两天内即可轻松完成),并且允许您几乎完美地复制生产环境。

它将在那些“但它可以在我的机器上运行”的时刻提供巨大帮助!


查看完整回答
反对 回复 2023-10-21
?
函数式编程

TA贡献1807条经验 获得超9个赞

更新我自己的问题,以便对其他人有所帮助。

我想说这可能是某人(或至少是我)未能检查的最后一件事。我尝试列出服务器中的路由,但发现找不到我新添加的路由。

php artisan route:list

早些时候,我清除了缓存,重新启动了apache,但没有帮助。最后发现当路由被缓存且无法工作时,以下命令是一个救星。所以对我有用的事情是清除“路由”缓存。

php artisan route:cache 
php artisan route:clear
查看完整回答
反对 回复 2023-10-21
  • 3 回答
  • 0 关注
  • 152 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信