十月CMS - 如何正确路由

时间:2016-02-11 21:19:55

标签: php laravel routing octobercms

我一直在审核10月CMS路由(https://octobercms.com/docs/plugin/registration#routing-initialization)的文档,但我认为我遗漏了一些东西。我有一个名为' deals'它提供了一些基本信息以及一个插件(称为' deals')组件。该页面通常出现在网址:

http://www.example.com/deals

但是,我想创建一个路线,以便在有人访问网址时<:p>

http://www.example.com/deals2

它会自动将它们路由回

http://www.example.com/deals

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

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

它抱怨说它无法找到“交易”&#39;视图。我做错了什么?

此外,我如何路由它以便我的主页

http://www.example.com

将路由到

http://www.example.com/deals

2 个答案:

答案 0 :(得分:11)

在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.

答案 1 :(得分:1)

尝试 Route::get('/deals2', function(){return Redirect::to('/deals')});将以额外请求为代价重定向浏览器。