问题 十月CMS - 如何正确路由


我一直在审查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

7768
2018-02-11 21:19


起源

如果它有帮助,我使用'脏'解决方法在我制作的网站上重定向主页。将其添加到.htaccess文件中: RewriteRule ^/?$ http://www.example.com/deals [R=301,NC,L] 你可以对你要重定向的其他网址做同样的事情,但同样,这只是我使用的一种解决方法,因为我不知道该怎么做才能正确做到....所以不是真正的答案。 - merodeador
这是一个很好的黑客,但我希望有一个内置的方法。感谢您的评论。 - user2694306
你想重定向吗? /deals2 特别是,或任何路线 /deals[some-number]? - BrokenBinary


答案:


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


10
2018-02-16 19:46



这很有效,谢谢。一个问题,你如何调整第一个重定向,以便它可以使用额外的网址段(例如/ deals2 / ca-toronto将进入/ deals / ca-toronto)? - user2694306


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


1
2018-02-16 19:37