【问题标题】:Laravel Route with Regex not matching when it shouldLaravel Route 与 Regex 不匹配
【发布时间】:2019-07-01 10:26:08
【问题描述】:

昨天我问过如何确保我的通配符路由不匹配任何 Laravel Nova 路由并很快找到了解决方案。

Nova 路线现在按我的意愿被忽略了。但这似乎也以其他方式摆脱了匹配。这是定义的路线:

Route::get('/{seite}/{zweit?}/{dritt?}', 'PagesController@anyPage')
    ->where('seite', '^(?!nova).*$');

/blog -> 应该匹配并且确实匹配

/blog/news -> 应该匹配但不匹配并导致 404

/blog/news/post-123 -> 同上

如果我从路由定义中删除正则表达式,所有这些示例都会匹配,但是我当然不能再访问 Nova。

知道是什么原因造成的吗?

【问题讨论】:

标签: laravel laravel-routing


【解决方案1】:

这可能是因为 RegEx 在 uri 中捕获了 / 字符。所以/blog/news 被seite 参数捕获。如果可以分享的话,看看你的 PagesController 和完整的 routes.php 会很有趣。

【讨论】:

  • 这是整个路由文件:Route::get('/', 'PagesController@frontPage'); Route::get('/en/', 'PagesController@frontPageEnglish'); Route::get('/{seite}/{zweit?}/{dritt?}', 'PagesController@anyPage') ->where('seite', '^(?!nova).*$');控制器应该无关紧要,因为它从未到达过。我在 anyPage 函数中添加了变量,但仍然得到 404 而不是任何输出。
  • 我也不明白为什么正则表达式会捕捉 / 字符..它应该只寻找单词 nova 的外观
  • @asto 正则表达式中的* 字符是贪婪的,这意味着它将匹配尽可能多的字符,包括正斜杠。原始问题中的正则表达式正在寻找尽可能多的字符,其中字符串不以nova 开头:因此,“blog/news”被传递给seite 参数,sweit 和@ 987654327@ 参数永远不会匹配。像^(?!nova)[^\/]* 这样的东西会抓住除斜线之外的所有东西。
猜你喜欢
  • 1970-01-01
  • 2013-11-27
  • 2020-01-18
  • 2012-09-22
  • 1970-01-01
  • 1970-01-01
  • 2014-06-23
  • 2015-12-07
  • 1970-01-01
相关资源
最近更新 更多