如何使用 codeigniter 创建 seo 友好的 url?

Posted

技术标签:

【中文标题】如何使用 codeigniter 创建 seo 友好的 url?【英文标题】:How to create seo friendly url with codeigniter? 【发布时间】:2015-04-25 04:18:55 【问题描述】:

我从几天前开始学习 Codeigniter,我想在 Codeigniter 上创建博客,但我想到了两个问题。

1. How to create SEO Friendly URL just like WordPress is using.

2. How to get page content after navigate to that 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/

导航到上面的网址后,如何获取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; ?>

现在我的网址如下所示: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

我创建了另一个 view(post) 来显示带有帖子 ID(从 URL 获取 ID)的帖子内容。

我走对了吗?需要你的建议来改进我的逻辑。

【问题讨论】:

您可以像这样使用:example.com/controller/method/1001/hello-world 这里 1001 是您的记录 ID,hello-world 是 Title。您可以使用此 ID 进行处理。 【参考方案1】:

第一个问题的答案

CodeIgnitor 是 oop 概念框架,使用 Model View Controller。(MVC架构) .

因此,网站上的每一次点击都会转到 Controller。然后只有控制器会决定显示什么或下一步做什么。

如果有 3 个页面(例如:主页、产品、联系我们),则使用 3 个控制器(主页=使用默认控制器,产品=使用product,联系我们=使用contact)。

那么你的 URL 将是(如果你点击产品)它会显示www.test.com/product,如果你点击联系它会显示www.test.com/contact

第二个问题的答案

在您的表中始终保持自动增量 ID(必须)。然后你就可以把id传给控制器,就可以得到你想要的数据了。

例如。我将一些内容加载到页面。(产品上的内容)。

您的数据显示页面(视图)

<?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

?>

所以你的 URL 看起来像(点击产品后,假设该产品的 id 是 25)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

【讨论】:

你好,阿卜杜拉。我已经在我昨天创建的问题上添加了一些代码,因此可以查看它并让我是否可以。谢谢。【参考方案2】:

我为一个旅游门户网站做了 SEO 友好的 url,下面的方法与 wordpress 有点相似。在tbl_post 中使用slug 列,以便您可以随时轻松更改它。假设您有一个类似

的帖子标题

如何使用 codeigniter 创建 seo 友好的 url?

然后首先将标题设为小写,将所有空格和特殊字符替换为-,这样你的 slug 就会像这样

如何创建 seo-friendly-url-with-codeigniter

现在,稍后当页面加载时,您必须解除 ID 以获取特定帖子的数据,然后将 id 附加到 url how-to-create-seo-friendly-url-with-codeigniter-15 的末尾,其中 15 是特定帖子的 id。

因此,当您调用主控制器时,匹配 post id 和 slug 然后渲染相关数据,否则显示 404 错误。

同时修改config/routes.php,这样你会得到类似的url:http://www.example.com/how-to-create-seo-friendly-url-with-codeigniter-15/

【讨论】:

嗨。我已经更新了我的问题并添加了code review 部分。如果我错了,您能否检查并查看我的代码并指导我。我创建了与您解释的相同的方式。谢谢:)【参考方案3】:

第 1 步:您需要在表格中添加一个字段“slug”。 第 2 步:因为您将保存帖子,您可以使用您的帖子标题作为您提到的 hello world 的 slug。您可以用“-”符号替换空格。所以你的标题应该是唯一的。

第 3 步:您可以在 URL 中传递该 slug 值而不是 post id,并且可以根据您的 slug 获取内容。

【讨论】:

以上是关于如何使用 codeigniter 创建 seo 友好的 url?的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter - SEO 友好的 URL 结构(Slug 实现)

codeigniter 的 seo 友好 url

Codeigniter 多语言并将语言添加到 url 以进行 seo

SEO交换友情链接注意事项

白杨SEO:小白如何制作sitemap.xml和html网站地图?实操

如何使用 codeigniter 动态创建列