【发布时间】:2020-11-18 15:27:57
【问题描述】:
我的路线中有这段代码:
Route::get('/{lang}/post/{id}-{slug?}',function($lang, $id, $slug=null) {
dd($lang, $id, $slug);
})->where('id', '[0-9]+');
site.com/en/post/30 -> 工作
site.com/en/post/30-myslug -> 工作
site.com/en/post/30- -> 404
为什么会出现 404 错误? slug 是可选的。
如果我将破折号替换为另一个字符,例如“i”
Route::get('/{lang}/post/{id}i{slug?}',function($lang, $id, $slug=null) {
dd($lang, $id, $slug);
})->where('id', '[0-9]+');
site.com/en/post/30i 工作
破折号有什么限制吗?
Laravel 5.8
真诚的
【问题讨论】:
-
问题在于,如果在路由参数之后出现以下字符之一:
/,;.:-_~+*=@|,,您不能在该路由参数中使用它,因为 Laravel 会调整正则表达式以排除该参数。 -
@STA,感谢您的 inf,我通过向 slug 添加正则表达式来解决问题!