如何使用 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 多语言并将语言添加到 url 以进行 seo