CI 3 新页面路由写在 application/config/routes.php 中,用 $route 数组声明,如 $route['about'] = 'pages/view/about';CI 4 则在 app/Config/Routes.php 中用 $routes->get('/about', 'Pages::view') 等方法注册,URI 必须以 / 开头,控制器类名首字母大写且位于 App\Controllers 命名空间下。

CI 3 的新页面路由写在 application/config/routes.php
所有自定义路由规则都集中在这个文件里,用 $route 数组声明。比如加一个新页面 /about,就写:$route['about'] = 'pages/view/about';
注意三点:
• 左边是用户访问的 URI(不带 index.php),右边是「控制器/方法」字符串;
• 如果方法名不是 index,必须显式写出,如 'pages/show/123';
• 新增规则不要插在 $route['default_controller'] 和 $route['404_override'] 中间——前者必须最前,后者必须最后,否则会跳过匹配。
CI 4 的新页面路由写在 app/Config/Routes.php 的 $routes->get() 等方法里
CI 4 不再用全局数组,而是通过 $routes 实例注册具体 HTTP 动词的路由:
$routes->get('/about', 'Pages::view');<br>$routes->post('/contact', 'Contact::submit');关键约束:
• URI 必须以
/ 开头,写成 'about' 就永远 404;• 控制器名首字母大写、对应
app/Controllers/Pages.php 中的 class Pages;• 方法名小写,不能带括号,也不能写成
'Pages::view()';• 如果控制器不在
App\Controllers\ 命名空间下,必须手动指定完整命名空间,但通常不建议这么做。
当代理已经知道网站路由或内容URL,并且在启动前需要有效的sitemap XML、sitemap索引或robots.txt引用时,请使用sitemap。这是一个发布构件技能,而不是爬虫或SEO平台。
别漏掉默认控制器和 404 路由的位置顺序
在 CI 3 中,这两项不是“可有可无的配置”,而是决定整个路由匹配流程的锚点:
• $route['default_controller'] = 'welcome'; 必须出现在 routes.php 最开头,否则可能被前面某条通配规则(如 $route['(.+)'])提前吃掉;
• $route['404_override'] = 'errors/not_found'; 必须放在文件末尾,CI 3.0+ 严格按顺序匹配,写早了会导致后面定义的路由完全不生效;
• CI 4 没有 $route 数组概念,但 $routes->setAutoRoute(false) 后,没显式注册的路径一律 404——这点比位置更致命。
新增页面后访问 404?先确认 Web 根目录是否指向 public/
CI 4 强制要求 Web 服务器根目录为 public/,不是项目根目录:
• Apache/Nginx 若仍指向 myapp/,浏览器访问 /about 实际请求的是 myapp/about,根本进不了 CI 路由层;
• 正确做法是把虚拟主机 DocumentRoot 设为 myapp/public/,此时 /about 才真正传给 public/index.php 处理;
• 这个问题不报错、不提示,只显示 “Whoops! We seem to have hit a snag…” 页面,容易误判为路由写错了。


















