October CMS - 如何正确路由
October CMS - How to correctly route
我一直在查看 October CMS 路由 (https://octobercms.com/docs/plugin/registration#routing-initialization) 的文档,但我认为我遗漏了什么。我有一个名为 'deals' 的页面,它呈现一些基本信息以及一个插件(称为 'deals')组件。该页面通常出现在 url:
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');
});
它抱怨找不到 'deals' 视图。我做错了什么?
此外,我怎样才能路由它,以便我的主页
http://www.example.com
会路由到
http://www.example.com/deals
试试看
Route::get('/deals2', function(){return Redirect::to('/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');
}
第一个路由使用带有 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。
我一直在查看 October CMS 路由 (https://octobercms.com/docs/plugin/registration#routing-initialization) 的文档,但我认为我遗漏了什么。我有一个名为 'deals' 的页面,它呈现一些基本信息以及一个插件(称为 'deals')组件。该页面通常出现在 url:
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');
});
它抱怨找不到 'deals' 视图。我做错了什么?
此外,我怎样才能路由它,以便我的主页
http://www.example.com
会路由到
http://www.example.com/deals
试试看
Route::get('/deals2', function(){return Redirect::to('/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');
}
第一个路由使用带有 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。