如何使用CodeIgniter创建SEO友好的URL?

5

我最近几天一直在学习Codeigniter,并且想要在Codeigniter上创建博客,但是我脑海中有两个问题:

1. 如何创建像WordPress一样的SEO友好型URL。

2. 如何在导航到该URL后获取页面内容。

我已经创建了tbl_post表来存储文章详情,其表结构如下:

 1. ID
 2. Title
 3. Content
 4. Tags
 5. Status
 6. Create Time
 7. Update Time
 8. Author ID
 9. Status

现在我想从上面的表格中创建动态的文章URL。
例如:http://www.example.com/hello-world/ 在导航到上面的URL后,如何获取hello-world文章的内容?
您已经注意到我没有传递任何ID来获取内容的示例URL。如果我传递ID但不想在URL字符串中显示,有什么建议吗?
就是这样。
如果您能指导我正确的方法,我将非常感谢。
谢谢。
代码审查
主页(我的博客文章列表视图)
主页控制器:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Home extends CI_Controller {
    
    public function index()
    {
        $this->load->model("HomeModel"); // Load home model
        $data['postData'] = $this->HomeModel->postData(); // Get posts data from postData function
        
        $this->load->view("global_header"); // Include header area
        $this->load->view("home", $data);
        $this->load->view("global_footer"); // Include footer area
    }
    
}

主页模型:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class HomeModel extends CI_Model{
    
    public function postData()
    {
        $this->db->select('tbl_post.*, tbl_user.first_name, tbl_user.last_name');
        $this->db->from('tbl_post');
        $this->db->join('tbl_user', 'tbl_post.author_id = tbl_user.id', 'Left Join');
        $query = $this->db->get();
        return $query->result();    
    }
    
}

主页视图

<?php for($i=0; $i<count($postData); $i++): ?>
        <?php 
            $postID =  $postData[$i]->id;
            $postTitle = $postData[$i]->title;
        ?>
        <a href="<?php echo base_url("$postID/$postTitle"); ?>">
            <h2 class="post-title">
                <?php echo $postTitle; ?>
            </h2>
        </a>
    </div>
    <hr>
<?php endfor; ?>

现在我的URL看起来像这样:http://example.com/1/man-must-explore-and-this-is-exploration-at-its-greatest
Domain: http://example.com
ID: 1
Title: man-must-explore-and-this-is-exploration-at-its-greatest

我创建了另一个视图(post)来显示帖子内容,帖子ID从URL中获取。

我这么做对吗?需要您的建议来改进我的逻辑。


你可以像这样使用:{http://www.example.com/controller/method/1001/hello-world} 这里的1001是你的记录ID,hello-world是标题。你可以使用这个ID进行处理。 - Anowar Hossain
3个回答

3

第一个问题的答案

CodeIgnitor是一种基于oop概念的框架,它使用ModelViewController (MVC架构)。

因此,每次单击站点时,它都会转到控制器。然后只有控制器才能决定显示什么或下一步该做什么。

如果有3个页面(例如:主页、产品、联系我们),则使用3个控制器 (主页=使用默认控制器、产品=使用产品、联系我们=使用联系人)。这样,如果您单击产品,则会显示www.test.com/product,如果单击联系我们,则会显示www.test.com/contact

第二个问题的答案

在表中始终保持自动递增id(MUST)。然后您可以将id传递给控制器,并获取所需的数据。

例如,我在页面上加载了一些内容(产品内容)。

您的数据显示页面(view)

<?php 
foreach ($product as $variable) // $product is data array which you send data
{
?>
   <div class="content">
        <a href="[call your controller here, in my `product`]/[*call sub function*, i use `show`]/ [*then pass here to product id*]<?php echo $variable['id']"></a> 
   <div>
<?php
}
?>

假设产品的id为25,那么您的URL应该是这样的(在点击产品后):www.test.com/product/show/25

然后在产品控制器中创建:

public function show($id)//$id variable to assign value which coming through URL 
{
   1. your code
   2. then load view
}

你好,阿卜杜拉。我在昨天创建的问题中添加了一些代码,请您审核一下并告诉我是否可以。谢谢。 - Manan

1
我为一个旅游门户网站设计了友好的SEO链接,并采用以下类似于WordPress的方法。在你的tbl_post表中使用slug列,以便以后可以轻松更改它。假设您有一个像“How to create seo friendly url with codeigniter?”这样的文章标题。首先将标题转换为小写字母,将所有空格和特殊字符替换为“-”,以便您的slug看起来像这样“how-to-create-seo-friendly-url-with-codeigniter”。现在稍后当页面加载时,您必须检测ID以获取特定文章的数据,然后将ID附加在URL的末尾“how-to-create-seo-friendly-url-with-codeigniter-15”,其中15是特定文章的ID。因此,当您调用主控制器时,请匹配帖子ID和slug,然后呈现相关数据,否则显示404错误。
同时修改 config/routes.php 文件,这样您将获得类似于以下链接的 URL:http://www.example.com/how-to-create-seo-friendly-url-with-codeigniter-15/

嗨,我已经更新了我的问题并添加了“代码审查”部分。您能否请检查和审查我的代码,并指导我是否有错误。我已按照您解释的方式创建了相同的内容。谢谢 :) - Manan

0

步骤1:您需要在表格中添加一个名为“slug”的字段。

步骤2:当您保存帖子时,可以使用帖子标题作为slug,就像您提到的“hello world”。您可以用“-”符号替换空格。因此,您的标题应该是唯一的。

步骤3:您可以将该slug值传递到URL中,而不是帖子ID,并根据您的slug获取内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接