12

我一直在查看 10 月 CMS 路由的文档(https://octobercms.com/docs/plugin/registration#routing-initialization),但我认为我遗漏了一些东西。我有一个名为“交易”的页面,它呈现一些基本信息以及一个插件(称为“交易”)组件。该页面通常出现在 url:

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
4

2 回答 2

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');
}

第一条路由使用带有正则表达式约束的路由参数,并将任何以数字开头/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。

于 2016-02-16T19:46:51.860 回答
1

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

于 2016-02-16T19:37:59.960 回答