我最近将Laravel 3迁移到Laravel 4的申请,并遇到了Laravel 3中使用的东西,即我无法在Laravel 4中找到相同的东西。

在Laravel 3中有一个生成的icetagcode,在我的应用程序中,存在以下共享路由,基本上被重定向了一个系列遗留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'); });
.

有帮助吗?

解决方案

我将把这个发布为自己的问题的答案,因为我发现了一些有效的东西。这使用URL参数和where()方法使用Regex来确定它是否与列表中的任何URL匹配。但是,我仍然没有觉得这与Laravel 3中的内容一样优雅(除非你真的喜欢普通表达并找到优雅)。

我仍然觉得有一个更优雅的解决方案。

Route::any('{any?}', function(){ return Redirect::route('lyrics'); })
    ->where('any', '(Songbook\/songbook\.html|Songbook|songbook\/songbook\.html|songbook|tgbs)');
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top