Laravel 5.4路由通配符

时间:2017-08-12 20:19:14

标签: laravel routes wildcard

我想知道如何在Laravel中创建URL,没有任何前缀。

例如:

如何转换以下网址:

http://www.example.com/posts/some-post

到此网址:

http://www.example.com/some-post

我知道这可以这样做:

Route::any('/{slug}', function($slug) {
    $page = App\Models\Page::firstByAttributes(['slug' => $slug]);
    if($page) {
      return Redirect::action('pagesController@find', array($page));
   }
})->where('slug', '.*');

但是对于上面的代码,我要为每个URL保留所有独特的slu ..

其他任何方法都可以吗?

感谢。

2 个答案:

答案 0 :(得分:1)

如果您想使用Laravel:

<强>路线

Route::get('posts/{slug}', function($slug) {
    // Does a 302 redirect, and the route below will handle it
    return redirect($slug);
});
Route::get('{slug}', 'pagesController@find');

<强>控制器

public function find($slug) {
    $page = App\Models\Page::where('slug', $slug);
    // ... your code
    // ... 
    // return view('something', ['page' => $page]);
}

答案 1 :(得分:0)

在您点击应用程序层之前,您可以使用Apache重写规则轻松完成您描述的重定向,这应该更加高效。例如,假设Apache设置为允许来自.htaccess的重定向,则以下内容应该足够了:

RewriteEngine On
RewriteRule ^posts/(.*) /$1 [R=301, L]

R=301表示重定向应该使用301 http响应代码,这将保留您的网页排名等。