2017-08-12 269 views
0

我想知道如何在Laravel中创建URL,没有任何前缀。Laravel 5.4路由通配符

例如:

如何变换以下网址:

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

此URL:

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

我知道这是可以做到:

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

但是对于上面的代码我必须为每个网址保留所有独特的slu slu。

任何其他方式来做到这一点的权利?

谢谢。

+0

怎么样'路线::获得( '{}塞', 'pagesController @找到');'?你能显示你所有的路线吗? – devk

+0

您是否必须在Laravel中执行此操作,为什么不使用Apache/nginx重定向? –

+0

@devk我已经发布了相同的代码。问题是我必须记录每个slu&和呼叫控制器。 –

回答

0

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

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

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

发生
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}', '[email protected]'); 

控制器

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

这与我发布的解决方案非常相似。其实我想调用基于url slug的控制器。即http://www.example.com/{slug}。现在我正在使用我的问题及其工作正常发布的代码。谢谢。 –