CodeIgniter中没有使用slug的SEO友好URL?

时间:2011-02-21 16:01:29

标签: codeigniter url-routing seo codeigniter-2

CodeIgniter中是否有一种方法(通过路由)来改变:

example.com/category/4example.com/category/foo-bar

其中Foo Bar是数据库中类别4的名称?

应允许从SEO友好的URL访问,但通过整数访问应该会导致404错误。

这也应该是动态的,任何整数都会自动转换为相应类别名称的URL安全版本。

我看过一些使用'slugs'的解决方案......是否有一个不错的选择?

感谢。

4 个答案:

答案 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 methodthis 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

玩得开心:)