【问题标题】:SEO-friendly URLs in CodeIgniter without the use of slugs?CodeIgniter 中的 SEO 友好 URL 不使用 slug?
【发布时间】:2011-02-21 16:01:29
【问题描述】:

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

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

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

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

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

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

谢谢。

【问题讨论】:

  • AFAIK 一个 slug 存储在某个数据库中。 foo-bar 只是 Foo Bar 的 URL 安全版本。

标签: codeigniter url-routing seo codeigniter-2


【解决方案1】:

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

URL 助手中有一个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,并修改您的代码以匹配 @987654329 @ 值及其在 DB 中的类别名称。

【讨论】:

    【解决方案2】:

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

    你为什么不想使用蛞蝓?

    【讨论】:

    • 因为类别名称是唯一的,不需要添加另一个表。我想我可以简单地即时确定 URL 安全字符串。
    【解决方案3】:

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

    我不建议抛出 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 友好的版本。

    【讨论】:

    • 这个方法和这个两个链接都坏了。
    【解决方案4】:

    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

    玩得开心:)

    【讨论】:

      猜你喜欢
      • 2014-11-06
      • 2016-05-28
      • 2011-07-15
      • 2011-12-24
      • 2015-07-30
      • 2013-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多