CodeIgniter框架怎么实现文章伪静态URL_CodeIgniter框架SEO路由规则实战【实战】

梦宇吖_3286

梦宇吖_3286

2026-05-01

819人浏览

原创

CodeIgniter伪静态核心是路由匹配、Web服务器跳过文件检查、请求交由index.php处理三者缺一不可;Apache需开启mod_rewrite、AllowOverride All并配置正确.htaccess;Nginx应使用try_files而非if重写;路由正则需精确捕获,config.php中index_page须置空、uri_protocol设为REQUEST_URI,且必须加载url helper。

codeigniter框架怎么实现文章伪静态url_codeigniter框架seo路由规则实战【实战】

CodeIgniter 实现文章伪静态 URL 的核心不是“加后缀”,而是让路由匹配真实路径、Web 服务器跳过文件/目录检查、并把请求正确交给 index.php 处理——三者缺一不可,漏掉任一环都会 404。

Apache 下伪静态失效的典型表现和修复点

你改了 routes.php,加了 $route['news/(\d+)\.html'] = 'article/show/$1';,但访问 /news/123.html 直接报 404,不是代码问题,是 Apache 根本没把请求转给 CI。

  • 确认 httpd.conf 中 LoadModule rewrite_module modules/mod_rewrite.so 已取消注释
  • 找到所有 AllowOverride None(常见于 <directory></directory> 块),改成 AllowOverride All —— WAMP/XAMPP 通常有 2–3 处,别只改一处
  • .htaccess 必须放在项目根目录(和 index.php 同级),内容用这个最稳的版本:
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
  • 别信网上那些带 QSA,PT 或多层 RewriteBase 的变体,CI 3.x 默认用 PATH_INFO 模式,index.php/$1 才能被正确解析

Nginx 下 try_files 替代 rewrite 更可靠

Nginx 不支持 .htaccess,硬套 Apache 规则会出问题。重点不是“重写”,而是“兜底”:当请求的文件或目录不存在时,交由 index.php 处理。

  • 在 server 块内配置 location / 时,必须用 try_files:
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
  • 不要用 if (!-e $request_filename) { rewrite ... } —— Nginx 官方明确不推荐在 location 中使用 if,容易触发意外跳转或 404
  • 确保 fastcgi_param SCRIPT_FILENAME 指向物理路径,且 fastcgi_split_path_info 开启(否则 PATH_INFO 为空,CI 拿不到路由段)
  • 如果项目不在 Web 根目录(比如 /var/www/html/blog/),root 要配准,且 try_files 中的 /index.php 是相对于 root 的,不是绝对路径

路由规则里正则捕获和参数传递的坑

伪静态 URL 的语义靠路由规则实现,但 CI 对 、 的替换很机械,稍不注意就传错参。

Seo Reporter
Seo Reporter

对URL进行SEO因素审计并生成可操作的Markdown报告。适用于分析、检查或审计网页SEO表现,涵盖标题等关键指标。

下载
  • $route['article/(\d+)-(\d+)\.html'] = 'article/detail/$1/$2'; 这样写没问题;但如果你写成 'article/detail/$2/$1',顺序就反了
  • 避免在正则中用贪婪匹配,比如 news/(.*)\.html —— 若 URL 是 news/2026/04/18/abc.html,$1 会是整个 2026/04/18/abc,控制器方法得手动 explode(),不如拆成 news/(\d+)/(\d+)/(\d+)/([a-z]+)\.html
  • 日期类路径建议用固定位数,比如 news/(\d{4})-(\d{2})-(\d{2})/(\d+)\.html,既防误匹配,也方便后续做数据库查询
  • 路由规则不区分大小写,但文件系统可能区分——确保控制器类名(Article.php)、方法名(show())和路由里写的完全一致

config.php 和 autoload.php 的配套调整

光配路由和重写不够,CI 自身行为也要对齐。

  • $config['index_page'] = ''; 必须设为空字符串,否则生成的 site_url() 仍带 index.php
  • $config['uri_protocol'] 推荐设为 REQUEST_URI(CI 3.x 默认),比 PATH_INFO 兼容性更好,尤其在 Nginx + PHP-FPM 组合下
  • url helper 必须加载($autoload['helper'] = ['url'];),否则 site_url('article/show/123') 无法生成带伪静态后缀的链接
  • 生成 HTML 链接时,别手写 <a href="/news/123.html"></a>,用 site_url('article/show/123') 并配合路由规则,才能保证开发/生产环境 URL 一致

真正难的不是写那几行重写规则,而是理解请求从浏览器发出后,如何经过 Web 服务器、PHP、CI 框架三层拦截与转发——每层都可能吃掉路径、丢掉参数、或拒绝处理。调试时优先看 Apache 的 error_log 或 Nginx 的 error.log,里面往往直接告诉你哪一步没走通。

相关文章

路由优化大师
路由优化大师

路由优化大师是一款及简单的路由器设置管理软件,其主要功能是一键设置优化路由、屏广告、防蹭网、路由器全面检测及高级设置等,有需要的小伙伴快来保存下载体验吧!

下载

相关标签:

codeigniter seo 路由

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
C语言变量命名
C语言变量命名

c语言变量名规则是:1、变量名以英文字母开头;2、变量名中的字母是区分大小写的;3、变量名不能是关键字;4、变量名中不能包含空格、标点符号和类型说明符。php中文网还提供c语言变量的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.20

3429

3

c语言入门自学零基础
c语言入门自学零基础

C语言是当代人学习及生活中的必备基础知识,应用十分广泛,本专题为大家c语言入门自学零基础的相关文章,以及相关课程,感兴趣的朋友千万不要错过了。

2023.07.25

2388

9

c语言运算符的优先级顺序
c语言运算符的优先级顺序

c语言运算符的优先级顺序是括号运算符 > 一元运算符 > 算术运算符 > 移位运算符 > 关系运算符 > 位运算符 > 逻辑运算符 > 赋值运算符 > 逗号运算符。本专题为大家提供c语言运算符相关的各种文章、以及下载和课程。

2023.08.02

1320

5

c语言数据结构
c语言数据结构

数据结构是指将数据按照一定的方式组织和存储的方法。它是计算机科学中的重要概念,用来描述和解决实际问题中的数据组织和处理问题。数据结构可以分为线性结构和非线性结构。线性结构包括数组、链表、堆栈和队列等,而非线性结构包括树和图等。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.09

1278

4

c语言random函数用法
c语言random函数用法

c语言random函数用法:1、random.random,随机生成(0,1)之间的浮点数;2、random.randint,随机生成在范围之内的整数,两个参数分别表示上限和下限;3、random.randrange,在指定范围内,按指定基数递增的集合中获得一个随机数;4、random.choice,从序列中随机抽选一个数;5、random.shuffle,随机排序。

2023.09.05

1396

5

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

2023.09.20

2278

7

c语言get函数的用法
c语言get函数的用法

get函数是一个用于从输入流中获取字符的函数。可以从键盘、文件或其他输入设备中读取字符,并将其存储在指定的变量中。本文介绍了get函数的用法以及一些相关的注意事项。希望这篇文章能够帮助你更好地理解和使用get函数 。

2023.09.20

3700

8

c数组初始化的方法
c数组初始化的方法

c语言数组初始化的方法有直接赋值法、不完全初始化法、省略数组长度法和二维数组初始化法。详细介绍:1、直接赋值法,这种方法可以直接将数组的值进行初始化;2、不完全初始化法,。这种方法可以在一定程度上节省内存空间;3、省略数组长度法,这种方法可以让编译器自动计算数组的长度;4、二维数组初始化法等等。

2023.09.22

17235

6

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

2023.09.22

549

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程