是否可以在Laravel 5的routes.php文件而不是我的.htaccess文件中执行URL重写?我知道重定向很容易,但我最好避免这样做,以便在地址栏中保留短网址。
说我有网址' http://website.com/store/clothing/shites/cool-shirt'将使用该路线:
Route::get('store/{category}/{subcategory}/{product}', [
'uses'=>'StoreController@getProduct'
]);
我想创建一个快捷方式网址' http://website.com/cool-shirt'这将从数据库表中获取完整的URL,然后调用正确的路由和参数(没有重定向)。
Route::get('{slug}', function($slug){
$shortcut = \App\Shortcut::whereSlug($slug)->first();
// I'm making the execute_route() function up here
return execute_route($shortcut->full_url);
})
基本上在路线中呼叫路线。
这可能吗?
答案 0 :(得分:0)
我理解你想要实现的目标,而不是试图在当前路径中调用另一个路由,我建议你只使用一个路由来处理请求,在控制器中处理数据库查询并显示和返回一个基于的视图目前的slu or还是扔了404。
像这样:
Route::get('/{slug?}',array(
'uses' => 'ShortcutController@getSlug',
'as' => 'shortcut.getSlug'
));
<?php namespace App\Http\Controllers;
use \View;
use App\Shortcut;
class ShortcutController extends Controller {
public function getSlug($slug=null){
if(!$shortcut = Shortcut::whereSlug($slug)->first()) abort(404);
return view('slug')
->with('shortcut', $shortcut);
}
}
NB:上面的路线应该是您的routes.php上的最后一个列表,否则其他一些路线可能会匹配