我最近将一个应用程序从Laravel 3迁移到了Laravel 4,并且遇到了Laravel 3中使用的一些我在Laravel 4中找不到的东西。
在Laravel 3中有一个Route::share
,在我的应用程序中有以下共享路由,它基本上将一系列遗留URL重定向到一个新URL。显然,这可以通过mod_rewrite规则来完成,但除了可以共享的路由中发生的简单重定向之外,还可能存在其他行为。
Route::share( array(
array('GET', 'Songbook/songbook.html'),
array('GET', 'Songbook'),
array('GET', 'songbook/songbook.html'),
array('GET', 'songbook'),
array('GET', 'tgbs'),
), function () {
return Redirect::to( 'lyrics', 301 );
} );
Laravel 4中是否有相同的功能?我唯一能做的就是为每个人创建谨慎的路线。好像应该有更优雅的方式:
Route::get('Songbook/songbook.html', function(){ return Redirect::route('lyrics'); });
Route::get('Songbook', function(){ return Redirect::route('lyrics'); });
Route::get('songbook/songbook.html', function(){ return Redirect::route('lyrics'); });
Route::get('songbook', function(){ return Redirect::route('lyrics'); });
Route::get('tgbs', function(){ return Redirect::route('lyrics'); });
答案 0 :(得分:0)
我将发布这个作为我自己问题的答案,因为我发现了一些有用的东西。这使用url参数和带有正则表达式的where()
方法来确定它是否与列表中的任何URL匹配。然而,我仍然觉得这不像Laravel 3那样优雅(除非你真的喜欢正则表达式并且发现它们很优雅)。
我仍然觉得有更优雅的解决方案。
Route::any('{any?}', function(){ return Redirect::route('lyrics'); })
->where('any', '(Songbook\/songbook\.html|Songbook|songbook\/songbook\.html|songbook|tgbs)');