如何去除Joomla 3网站静态化URL地址中的分类ID和文章ID

2015-10-01 by Vincent Ping | Category: 编程 | Tags: Joomla

目前本站使用工具直接生成静态页面,不再使用Joomla!,此处保留原文,仅供参考。

一、问题

我的站点vincentping.com是使用Joomla 3.4.4版本管理的,Joomla是一个非常专业的网站内容管理系统(CMS),但是其在SEO搜索引擎优化后的URL模式上有一些不足。

我首先创建了一些分类和文章,然后在系统管理后台的"Global Configuration"设置"SEO Settings"。其中的选项

  • Search Engine Friendly URLs 设为 Yes
  • use URL Rewriting 设为 Yes
  • Adds Suffix to URL 也设为 Yes

如下图:

seo setting

这个时候访问站点,文章的URL地址变成如下这样的形式:

http://www.vincentping.com/cn/8-blogcn/14-remove-category-article-id-from-url-in-joomla-3-cn.html

相对于原来没有SEO优化前的地址:

http://www.vincentping.com/index.php?option=com_content&view=article&id=14:remove-category-article-id-from-url-in-joomla-3-cn&catid=8&lang=cn

上面的优化地址要好得多了,但是还有一些小小的不爽,比如在分类前的8-和文章名之前的14-。很显然这些数值都是数据库中的ID值,这样程序在查找后台数据库时,有了这些值会更加高效,但是对于普通访问者来说,这些数值就显得有些奇怪,而且会让站点显得不够专业,不够”高大上“!

怎么办呢?经过在google上查询,网上有大量的相关讨论。经过不断地摸索和尝试,下面是我最终使用的解决办法。

二、解决方法

  1. 在Joomla系统的目录下,找到下面php文章:“components/com_content/router.php“;

  2. 查找到下面代码:

    $advanced = $params->get('sef_advanced_link', 0);

  3. 把其中 "0" 改为 "1",修改结果如下:

    $advanced = $params->get('sef_advanced_link', 1);

    在这个router.php文件中共有两处需要修改的地方。

  4. 继续在该router.php文件中,找到下面的代码段,然后注释掉:

    if (strpos($segments[0], ':') === false)
    {
         $vars['view'] = 'article';
         $vars['id'] = (int) $segments[0];
    
         return $vars;
     }
    

    注释成:

    /* if (strpos($segments[0], ':') === false)
     {
         $vars['view'] = 'article';
         $vars['id'] = (int) $segments[0];
    
         return $vars;
     } */
    

然后整个修改就完成了!

这个时候,该页面的URL地址变成:

http://www.vincentping.com/cn/remove-category-article-id-from-url-in-joomla-3-cn.html

提示:一旦以后Joomla版本升级,上述的修改可能被覆盖,就需要重新做。

三、一些其他可以尝试的方法

我在网络上搜索解决方法时,发现这个URL中数值问题对于Joomla社区已经是一个很”古老“的问题了,但是在核心代码中一直没有得到解决。所以市面上已经出现了许多的解决办法。下面这些方法都可以试试:

  • 使用第三方的SEF扩展,比如Sh404SEF,JoomSEF和SEF Advance等。可以到JED(Joomla! Extensions Directory) 搜索”SEF“,就可以找到很多类似扩展。扩展的问题是很多需要付费,会增加服务器负担,而且升级和维护起来也是个问题。
  • 如果你对正则表达式比较熟悉,可以在.htaccess文件中增加解析和重定向规则来解决这些问题。当然使用太多.htaccess规则是会影响服务器效率的。
  • 最后,如果你的站点不大,文章也不多,那么可以像上面介绍的建立菜单项的方法,为每篇文章都建立一个菜单项,这个文章数值问题也能完全解决。

如果想继续仔细研究下这个URL中的文章ID数值问题,推荐大家可以看看这个在Joomla官方论坛上的帖子:"Remove article id from url for joomla 3.0"。


Remove Category and Article ID from URL in Joomla 3

2015-10-01 by Vincent Ping | Category: 编程 | Tags: Joomla

Joomla is a very professional content management system (CMS), but there're some minor shortcoming within the SEO URL Mapping.

read more