十月 CMS - 如何正确路由
Posted
技术标签:
【中文标题】十月 CMS - 如何正确路由【英文标题】:October CMS - How to correctly route 【发布时间】:2016-05-22 20:57: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
【问题讨论】:
如果有帮助,我在我创建的网站上使用了一个“肮脏”的解决方法来重定向主页。将此添加到您的 .htaccess 文件中:RewriteRule ^/?$ http://www.example.com/deals [R=301,NC,L]
您可以对要重定向的其他 url 执行相同的操作,但同样,这只是我使用的一种解决方法,因为我不知道如何正确执行... . 所以不是一个真正的答案。
这是一个不错的 hack,但我希望有一个内置的方法。感谢您的评论。
您是要专门重定向/deals2
,还是像/deals[some-number]
这样的任何路由?
【参考方案1】:
在 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。
【讨论】:
这很好用,谢谢。一个问题,您将如何调整第一个重定向,以便它可以与其他 url 段一起使用(例如 /deals2/ca-toronto 将转到 /deals/ca-toronto)?【参考方案2】:试试
Route::get('/deals2', function()return Redirect::to('/deals'));
会以额外请求为代价重定向浏览器。
【讨论】:
以上是关于十月 CMS - 如何正确路由的主要内容,如果未能解决你的问题,请参考以下文章