将有几个引人注目的链接供客户关注,例如:
- 联系我们@domain.com/home/contact
- 关于服务@domain.com/home/service
- 定价@ domain.com/home/pricing
- 它是如何工作的@ domain.com/home/how_it_works
类似的东西。我想从 URL 中隐藏家庭控制器,以便客户只能看到/contact/,而不是/home/contact/。与/pricing/不是/home/pricing/相同
我知道我可以为每个特殊页面设置一个控制器或一个路由,但是除了我想从数据库中提取的内容之外,它们看起来是一样的,我宁愿让我的代码保持干燥。
我设置了以下路线:
Route::get('/about_us', 'home@about_us');
Route::get('/featured_locations', 'home@featured_locations');
哪个效果很好,但如果我在 URL 中与控制器的链接上有重复的内容,我担心 SEO 麻烦。(我不打算同时使用两者,但众所周知我会做一些更愚蠢的事情。)
所以然后制作了这样的路线:
Route::get('/about_us', 'home@about_us');
Route::get('/home/about_us', function()
{
return Redirect::to('/about_us', 301);
});
Route::get('/featured_locations', 'home@featured_locations');
Route::get('/home/featured_locations', function()
{
return Redirect::to('/featured_locations', 301);
});
现在我有一个重定向。感觉很愚蠢,但它似乎正在按照我想要的方式工作。如果我以较短的 URL 加载页面,它会加载我的内容。如果我尝试访问更长的 URL,我会被重定向。
大概只有8、9个特殊链接,所以我可以轻松管理路线,但我觉得必须有一个聪明的方法来做到这一点。
这甚至是 PHP 问题,还是 .htaccess / web.config 问题?
我用这个重定向方案创造了什么。聪明人是怎么做到的?我一直在寻找两个小时,但我找不到一个术语来描述我在做什么。
laravel 4 中是否有内置的东西可以处理这个问题?
更新:
这是我尝试实现其中一个答案的尝试。这不起作用,我不知道我做错了什么。
应用程序/routes.php
Route::controller('home');
Route::controller('Home_Controller', '/');
(如果您真的想查看一些损坏的代码,可以查看编辑历史记录)
现在domain.com/AboutYou和domain.com/aboutUs正在返回 404。但是domain.com/home/AboutYou和domain.com/home/aboutUs仍然按应有的方式返回。
最终编辑
我从PongoCMS routes.php(基于 Laravel 3)复制了一个想法,我看到他们使用过滤器来获取任何 URI 段并尝试创建一个 CMS 页面。
请参阅下面使用路由过滤器的答案。这种新方式不需要我注册每条特殊路线(好),但确实放弃了对规范的重定向(坏)