CodeIgniter路由及base_url异常:导航跳转路径错误求助
解决CodeIgniter导航栏相对路径导致的URL错误问题
这个问题的核心原因是导航栏的Home链接用了相对路径——当你在http://localhost/cathode/blog/post-one页面时,相对路径会基于当前URL的层级生成,所以点击Home就会跳到blog/home,而不是根目录下的Home入口。
下面是几种靠谱的解决方法:
1. 使用CodeIgniter的base_url()生成绝对路径(推荐)
这是框架最标准的做法,能自动适配你的base_url配置,彻底避免硬编码路径的麻烦。
首先确保application/config/config.php里的base_url已经正确设置:
$config['base_url'] = 'http://localhost/cathode/';
然后修改导航栏视图(frontend/navbar.php)里的Home链接:
<a href="<?php echo base_url('home'); ?>">Home</a>
这样不管你在哪个页面,链接都会指向http://localhost/cathode/home,完全符合预期。
2. 使用site_url()函数(另一种框架推荐方式)
site_url()和base_url()的区别是,它会自动包含index.php(如果你的配置里开启了的话),适合需要兼容带index.php路径的场景:
<a href="<?php echo site_url('home'); ?>">Home</a>
如果你的index.php已经通过.htaccess隐藏了,这个函数也会自动适配,不用额外修改。
3. 手动使用根路径开头的绝对路径(不推荐)
如果你不想用框架函数,也可以直接写绝对路径,但这种方式硬编码了目录,后期更换域名或目录时需要逐一修改,灵活性很差:
<a href="/cathode/home">Home</a>
额外检查点
如果你用.htaccess隐藏了index.php,确认它的配置正确,避免路径解析出现问题,标准的CodeIgniter隐藏index.php的.htaccess内容大概是这样:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L]
内容的提问来源于stack exchange,提问作者yusufatw
相关产品推荐
相关产品推荐

