Laravel将网址从{id}重定向到{id} / {name}

时间:2018-08-20 06:39:30

标签: laravel laravel-routing

我是laravel框架的新手,现在我正在使用Laravel开发完全开发的网站。我已将博客网址格式从{id}更改为{id} / {name},例如将www.example.com/news/203更改为www.example.com/news/203/title。一切正常。但是如果旧网址输入从缓存或其他内容打开的当前网址,我需要重定向。

Route::get('{id}/{name}', 'EventController@show')
            ->name('events-detail')
            ->where([
                "id" => "[0-9]+"
    ]);

3 个答案:

答案 0 :(得分:1)

您可以定义另一条路线,通过该路线您可以通过id查找模型,并使用其标题将用户重定向到新路线:

Route::get('{id}', function ($id) {
    $model = Model::findOrFail($id);

    return redirect()->route('events-detail', ['id' => $id, 'name' => $model->name]);
});

请注意,您必须将Model更改为用于此路由的类。

答案 1 :(得分:1)

创建2条路线并添加以下代码。

Route::get('{id}/{name}', function () {
    //new URL as you want
    return redirect()->route({id}/{name});
});
Route::get('{id}', function () {
    //as you want for simple URL
});

答案 2 :(得分:0)

我假设{SEO /更友好的URL之外,根本没有使用name部分。如果是这种情况,只需将name参数设为可选,就无需重定向:

Route::get('{id}/{name?}', 'EventController@show')
    ->name('events-detail')
    ->where([
        "id" => "[0-9]+"
    ]);

此路线将匹配/203/203/news-title