我有一条简单的路线,像这样:
Route::get('/{name}-{id}', function($name, $id){
return view('hello', compact('name', 'id'));
});
我有一个网址:example.com/hello-world-1234
Laravel在处理此路线时遇到问题。它会将“ hello”检测为name
,将“ world-1234”检测为id
。
如果我使用htaccess进行路由,则不会发生这种情况:
RewriteRule ^([^/]+)-([^/]+)/?$ hello.php?name=$1&id=$2 [QSA,L]
htaccess正确地将“ hello-world”检测为name
,将“ 1234”检测为id
。
如何解决这个问题?
答案 0 :(得分:1)
在这里,尝试将此作为您的代码。它应该正确识别所需的名称和ID。
Route::get('/{name}-{id}', function($name, $id){
return view('hello', compact('name', 'id'));
})->where(['name' => '^([^\/]+)', 'id' => '([^\/]+)\/?$']);
答案 1 :(得分:0)
我正在考虑正则表达式https://laravel.com/docs/5.6/routing#parameters-regular-expression-constraints
,
但是您的id
是不固定的,就像id
= world-1234
一样,我认为很难做到这一点,可以将-
替换为.
吗?>