4

CodeIgniter 中是否有办法(通过路由)进行更改:

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

Foo Bar数据库中的类别名称在哪里4

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

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

我见过一些使用“蛞蝓”的解决方案......有没有像样的选择?

谢谢。

4

4 回答 4

4

在过去的几个月里,我只是在业余时间使用 CodeIgniter,所以我还在学习,但我会试一试(温柔点):

URL Helper 中有一个url_title()函数(当然需要加载),它将更改Foo Barfoo-bar.

$name = 'Foo Bar';
$seo_name = url_title($name, TRUE);
// Produces: foo-bar

http://codeigniter.com/user_guide/helpers/url_helper.html

默认情况下,URL 助手会去除非法字符并加入连字符(下划线,通过参数),并且该TRUE参数将小写所有内容。

为了解决您的问题,我想您可以foreach在您的 routes.php 文件中执行一条语句,或者将url_title()值传递给 URL,而不是 ID,然后修改您的代码以将url_title()值与其在数据库中的类别名称匹配。

于 2011-02-21T23:08:27.793 回答
0

您可以尝试使用此方法方法将搜索引擎友好路线存储在数据库中。

我不建议抛出 404。如果您担心 Google 会同时索引http://googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html ,请使用规范链接标签。

但是如果你真的想我猜你可以编写一个在 pre_controller 钩子http://codeigniter.com/user_guide/general/hooks.html期间调用的函数,它检查 URL 是否有一个整数作为第二段然后调用 show_404() 方法。编写此函数时,也许更好的解决方案是重定向到 SEO 友好版本。

于 2011-02-21T22:57:20.893 回答
0

Afaik 4 和“foo-bar”之间的链接必须存储在数据库中,因此您必须运行一些查询。这通常不是通过 CI 中的路由来完成的。此外,路由只是将 URL 指向控制器和函数,与 url 重写几乎没有关系。

你为什么不想使用蛞蝓?

于 2011-02-21T17:07:36.670 回答
-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 为您提供更好的解决方案。

$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    

如何在codeigniter中修改路由

玩得开心 :)

于 2015-06-17T03:46:12.207 回答