为CMS制作SEO友好的URL

时间:2012-05-11 04:19:27

标签: php codeigniter seo

我正在尝试使用Codeigniter创建内容管理系统。我有一个页面,显示文章标题列表。当任何用户点击任何文章标题时,用户将在单独的页面中查看该文章的详细信息。

我正在使用以下代码显示文章标题列表:

 <a href="<?php echo base_url(); ?>article/<?php echo $row['article_id']; ?>">
 <?php echo $row['article_title']; ?></a>

当任何用户点击上面的链接时,它会获取article_id并转到以下控制器

控制器:

function index($id){

   $this->load->model('mod_articles');
    $data['records']=$this->mod_articles->list_articles($id);
    $this->load->view('view_article',$data);
}

型号:

  function list_articles($id)
    {   
        $this->db->select('*');
        $this->db->from('article');
        $this->db->where('article_id', $id); 
        $query = $this->db->get();
        return $query->row_array();

    }  

现在,当我显示结果时,在浏览器的地址栏中,链接看起来像这样 -

  localhost/cms/article/1         //<< here localhost/cms/ is my base_url

根据此website,良好的SEO友好网址的示例是http://www.mysite.com/joomla-seo-tips

现在我的问题是如何让我的网址看起来像localhost/cms/article/my-article-title而不是在链接末尾显示文章的ID?

为了实现这一点,我应该查询我的文章标题而不是文章ID,或者有更好的方法来做到这一点?

请分享您的想法。

提前致谢:)

修改

所以,在保存我的内容之前,我应该运行以下代码获取$article_slug然后保存它吗?

function create_slug($string){
$slug=preg_replace('/[^A-Za-z0-9-]+/', '-', $string);
return $slug;
}

$article_slug= create_slug('My Name ');   // as you suggested I will create a new column for this

2 个答案:

答案 0 :(得分:2)

保存记录时,通过在标题上运行url_title()给它一个URL slug(这应该是一个唯一的列,确保在保存时检查重复的条目)。

url_title("My page title!")应返回my-page-title之类的内容,请参阅url helper。我通常也会在slugs上运行strtolower,看起来像CI允许上限。

当您查询内容时,请通过slug获取内容,例如:

$this->db->where('slug', $this->uri->segment(1))->get('articles'); 

当然,使用slug代替ids。

答案 1 :(得分:1)

您的“文章”表可以包含一个附加字段(“slug”是一个流行的名称,因此在您的示例中可能是'article_slug'),它既可以用作URL的一部分,也可以用作要查询的字段。通常,CMS会将'slug'显示为可编辑字段,但会预先填充页面标题的值(通常通过小写标题,将空格转换为破折号并清理任何URL不友好的字符,如引号)。