我一直在审查10月CMS路由的文档(https://octobercms.com/docs/plugin/registration#routing-initialization),但我认为我错过了一些东西。我有一个名为'deals'的页面,它提供了一些基本信息以及一个插件(称为'deals')组件。该页面通常出现在网址上:
http://www.example.com/deals
但是,我想创建一个路由,以便有人访问该网址时:
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
在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');
}
第一个路由使用带有a的路由参数 正则表达式约束 并将重定向以任何开头的请求 /deals
并以一个数字结束 /deals
路线。这意味着它将路由 /deals1
, /deals2
, /deals3
等等 /deals
。
第二条路线会将您的主页重定向到 /deals
。
当然,重定向将需要额外的请求。如果您不想这样做,那么您可以在Apache或Nginx中进行重定向。
根据您的评论,如果您想重定向 /deals[any-number]/[anything]
至 /deals/[that-same-anything]
然后你会添加一个 可选的路由参数 到第一条路线。这看起来像这样:
// The new first route
Route::get('{dealSlug}/{extra?}', function($dealSlug, $extra = '') {
return redirect('deals/' . $extra);
})->where('dealSlug', '^deals[0-9]+');
当然,如果那样的话 /deals/[anything]
路线不存在,那么你将获得404。
尝试
Route::get('/deals2', function(){return Redirect::to('/deals')});
这将以额外请求为代价重定向浏览器。