【问题标题】:Laravel Redirect url from {id} to {id}/{name}Laravel 将 url 从 {id} 重定向到 {id}/{name}
【发布时间】:2019-01-26 06:14:04
【问题描述】:

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

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

【问题讨论】:

    标签: laravel laravel-routing


    【解决方案1】:

    我假设name 部分根本没有真正使用,除了 SEO/更友好的网址。如果是这种情况,只需将name 参数设为可选,就不需要重定向了:

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

    这条路线将匹配/203/203/news-title

    【讨论】:

      【解决方案2】:

      创建 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
      });
      

      【讨论】:

        【解决方案3】:

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

        Route::get('{id}', function ($id) {
            $model = Model::findOrFail($id);
        
            return redirect()->route('events-detail', ['id' => $id, 'name' => $model->name]);
        });
        

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

        【讨论】:

        • 有机会在这个 'Route::get('{id}', 'EventController@show') ->name('events-detail') ->where([ " id" => "[0-9]+" ]);'
        • @SukumarChandran,在控制器中与上面的控制器相同。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-07-30
        • 2018-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多