2016-02-11 113 views
10

我一直在审查十月CMS路由文档(https://octobercms.com/docs/plugin/registration#routing-initialization),但我认为我错过了一些东西。我有一个名为'deals'的页面,它提供了一些基本信息以及一个插件(称为'deals')组件。因此,如果有人访问网址十月CMS - 如何正确路由

http://www.example.com/deals 

不过,我想创建一个路由:页面通常出现在URL

http://www.example.com/deals2 

它会自动将他们带回

http://www.example.com/deals 

我知道我应该在我的插件目录中创建一个routes.php文件。但是,当我尝试使用

Route::get('/deals2', function() 
{ 
     return View::make('deals'); 
}); 

它抱怨说它无法找到'交易'视图。我究竟做错了什么?

此外,我怎么能航线它使我的主页

http://www.example.com 

将路线

http://www.example.com/deals 
+0

如果有帮助,我使用的“脏”的解决方法为家页面在我创建的网站上重定向。把这个添加到你的.htaccess文件中:'RewriteRule^/?$ http://www.example.com/deals [R = 301,NC,L]' 你可以对你想重定向的其他url做同样的处理,但再一次,这只是我使用的一种解决方法,因为我不知道该怎么做才能正确执行....所以不是真正的答案。 – merodeador

+0

这是一个很好的黑客攻击,但我希望有一个内置的方法。感谢您的评论。 – user2694306

+0

您是否正在尝试重定向'/ deals2',或者像'/ deals [some-number]'这样的任何路线? – BrokenBinary

回答

9

在OctoberCMS和Laravel它是基于,一个路由重定向到另一个,你可以这样做:

// Redirect /deals2, /deals3, ... to /deals 
Route::get('{dealSlug}', function($dealSlug) { 
    return redirect('deals'); 
})->where('dealSlug', '^deals[0-9]+'); 

// Redirect homepage to /deals 
Route::get('/', function() { 
    return redirect('deals'); 
} 

第一路由使用的路由参数与regex constraint并重定向任何请求从/deals开始,并以您的/deals路线的号码结尾。这意味着它会将/deals1/deals2,/deals3等路由到/deals

第二条路线将您的主页重定向到/deals

当然,重定向会花费额外的请求。如果你不想这样做,那么你可以在Apache或Nginx中进行重定向。

根据您的意见,如果您想将/deals[any-number]/[anything]重定向到/deals/[that-same-anything]那么您应该在第一条路线上添加optional route parameter。这将是这样的:

// The new first route 
Route::get('{dealSlug}/{extra?}', function($dealSlug, $extra = '') { 
    return redirect('deals/' . $extra); 
})->where('dealSlug', '^deals[0-9]+'); 

当然,如果/deals/[anything]路由不存在,那么你会得到一个404

+0

这很好,谢谢。一个问题,你将如何调整第一个重定向,以便它可以处理额外的url段(例如/ deals2/ca-toronto会去/ deal/ca-toronto)? – user2694306

1

尝试 Route::get('/deals2', function(){return Redirect::to('/deals')});这将重定向需额外要求的成本浏览器。