CodeIgniter中是否有一种方法(通过路由)来改变:
example.com/category/4
至example.com/category/foo-bar
其中Foo Bar
是数据库中类别4
的名称?
应允许从SEO友好的URL访问,但通过整数访问应该会导致404错误。
这也应该是动态的,任何整数都会自动转换为相应类别名称的URL安全版本。
我看过一些使用'slugs'的解决方案......是否有一个不错的选择?
感谢。
答案 0 :(得分:4)
我在业余时间只与CodeIgniter合作过去几个月,所以我还在学习,但我会对此有所了解(温柔):
网址助手中有一个url_title()
功能(当然需要加载),会将Foo Bar
更改为foo-bar
。
$name = 'Foo Bar';
$seo_name = url_title($name, TRUE);
// Produces: foo-bar
http://codeigniter.com/user_guide/helpers/url_helper.html
默认情况下,URL帮助器会删除非法字符并抛出连字符(下划线,按参数),TRUE
参数将小写所有内容。
要解决您的问题,我想您可以在routes.php文件中执行foreach
语句,或者将url_title()
值传递给URL,而不是ID,并将代码修改为将url_title()
值与其在DB中的类别名称匹配。
答案 1 :(得分:0)
Afaik 4和“foo-bar”之间的链接必须存储在数据库中,因此您必须运行一些查询。这通常不是通过CI中的路由来完成的。路由只是将URL指向控制器和函数,与url重写几乎没有关系。
你为什么不想使用slu ??
答案 2 :(得分:0)
您可以尝试使用this method或this one在数据库中存储搜索引擎友好路线。
如果您担心Google会为http://googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html编制索引,我建议您不要使用404。
但是如果你真的想我猜你可以写一个在pre_controller hook http://codeigniter.com/user_guide/general/hooks.html期间调用的函数来检查URL是否有一个整数作为第二个段然后调用show_404()方法。编写此函数时,或许更好的解决方案是重定向到SEO友好版本。
答案 3 :(得分:-1)
CodeIgniter中是否有一种方法(通过路由)来改变:
example.com/category/4到example.com/category/foo-bar
其中Foo Bar是数据库中类别4的名称?
是
使用CI 3, http://www.codeigniter.com/user_guide/general/routing.html
使用回调,PHP> = 5.3
$route['products/([a-zA-Z]+)/edit/(\d+)'] = function ($product_type, $id)
{
return 'catalog/product_edit/' . strtolower($product_type) . '/' . $id;
};
您可以路由以调用函数以提取类别的名称。
希望我回答你的问题,并且可以帮助更多人喜欢codeigniter,因为我相信它快速而轻盈。
Slugs的使用对于提高Web应用程序的安全性非常重要,我认为这很重要。
更好的建议是使用路线为您提供更好的解决方案。
$route['(:any)/method/(:num)'] = 'Class/method';
或
$route['(:any)/method/(:num)'] = 'Class/method/$1';
$route['(:any)/gallery/(:num)'] = 'Class/gallery/$1';
base_url()/business-services/gallery/6
base_url()/travel/gallery/12
how to modify routes in codeigniter
玩得开心:)