codeigniter 通过 site_url() 和 base_url() 辅助函数安全生成 url:site_url() 用于控制器路由链接,base_url() 专用于静态资源;配合命名路由和正确配置 $baseurl 与 $indexpage,确保链接环境一致、可维护且无硬编码。

CodeIgniter 本身不自动拼接完整 URL,但提供了可靠的辅助函数和配置机制,让链接生成既安全又可维护。关键在于统一使用 base_url() 和 site_url(),配合合理的路由配置,避免硬编码路径。
用 site_url() 生成控制器路由链接
site_url() 是生成指向控制器方法 URL 的标准方式,它自动包含 base URL 和 index.php(或已移除后的干净路径),且适配当前环境配置。
- 默认用法:
<?php echo site_url('home/index'); ?>→/notflix/home/index(若已移除 index.php) - 带参数:
site_url('user/profile/123')→/notflix/user/profile/123 - 支持数组形式:
site_url(['admin', 'dashboard', 'edit', 5])→ 自动拼接为斜杠分隔路径
用 base_url() 加载静态资源
base_url() 返回项目根目录的绝对路径(通常指向 public/ 或 htdocs/),专用于 CSS、JS、图片等静态文件。
<link rel="stylesheet" href="<?=%20base_url('css/app.css')%20?>"><img src="<?=%20base_url('uploads/avatar.jpg')%20?>">- 注意:不要用
base_url()指向控制器,那会绕过路由机制,导致 404 或安全风险
自定义路由提升链接语义性
在 app/Config/Routes.php(CI4)或 application/config/routes.php(CI3)中定义简洁路由,让 URL 更易读、更利于 SEO。
- 命名路由(CI4 支持):
$routes->add('blog/post/(:num)', 'Blog::view/$1', ['as' => 'blog.view']); - 生成命名路由链接:
route_to('blog.view', 101)→/blog/post/101(比硬写字符串更可靠) - 重写默认行为:
$routes->add('about', 'Pages::view/about');,之后site_url('about')就能正确跳转
确保 URL 生成与环境一致
链接是否正常,取决于 app/Config/App.php 中的两个关键配置:
-
public $baseURL = 'http://localhost/notflix/';— 必须准确填写,含结尾斜杠 -
public $indexPage = 'index.php';— 若已通过 .htaccess 移除 index.php,此处应设为空字符串:'' - 错误设置会导致
site_url()输出带多余 index.php 或协议错乱,调试时优先检查这两项











