CodeIgniter中.htaccess配置下分页及CSS加载问题求助
我来帮你拆解这个问题——其实核心是CodeIgniter的路由重写和静态资源路径的配合问题,咱们一步步理顺解决:
一、先搞定分页失效的问题(base_url设为不带index的情况)
你遇到的分页失效,本质是分页生成的URL没被正确路由到控制器方法。咱们从这几个点排查:
确认.htaccess配置正确
确保你的.htaccess文件放在项目根目录(也就是project文件夹下),内容是CodeIgniter标准的重写规则:RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L]同时要保证Apache的
mod_rewrite模块已经开启(如果是XAMPP/WAMP,在Apache设置里勾选即可)。配置路由映射
当你把base_url设为http://localhost/project/member时,分页生成的URL会是member/2、member/3这类,但CodeIgniter默认不会把member/(:num)映射到member/index/(:num)。所以要在application/config/routes.php里添加路由规则:// 把member后面的页码参数指向index方法 $route['member/(:num)'] = 'member/index/$1';如果你想更灵活(比如支持带其他参数的情况),也可以写:
$route['member(/:num)?'] = 'member/index$1';调整分页的uri_segment配置
现在分页参数在URL的第3段(比如member/2里的2),所以控制器里的分页配置要对应设置:$config['uri_segment'] = 3;另外,建议用CodeIgniter的
site_url()动态生成base_url,避免硬编码:$config['base_url'] = site_url('member');
二、解决Bootstrap CSS加载失败的问题
这个问题是相对路径的坑导致的:当URL是member/index/2时,页面里的相对路径(比如css/bootstrap.css)会被浏览器解析成project/member/css/bootstrap.css,但你的CSS文件实际在project/css/下面,自然加载失败。
有两个简单的解决方法:
使用绝对路径加载静态资源
直接用项目根路径开头的绝对路径,或者用base_url()动态生成:<link rel="stylesheet" href="<?php echo base_url('css/bootstrap.css'); ?>">记得先在
application/config/config.php里正确设置全局的base_url:$config['base_url'] = 'http://localhost/project/'; $config['index_page'] = ''; // 因为已经用.htaccess移除了index.php设置HTML的base标签
在页面的<head>里添加一个base标签,指定所有相对路径的基准URL:<base href="<?php echo base_url(); ?>">这样页面里所有的相对路径(比如
css/bootstrap.css)都会自动解析成http://localhost/project/css/bootstrap.css,不管当前URL是什么层级都不会出错。
三、整合最优配置
把上面的步骤整合起来,最终的正确配置应该是这样的:
全局配置(config.php)
$config['base_url'] = 'http://localhost/project/'; $config['index_page'] = '';路由配置(routes.php)
$route['member/(:num)'] = 'member/index/$1';控制器分页代码
$this->load->library('pagination'); $config['base_url'] = site_url('member'); $config['total_rows'] = $this->member_model->get_total_count(); // 替换成你的总记录数 $config['per_page'] = 10; $config['uri_segment'] = 3; $this->pagination->initialize($config); // 获取当前页码,默认是0 $page = $this->uri->segment(3, 0); $data['members'] = $this->member_model->get_paginated_members($config['per_page'], $page);页面加载CSS
<link rel="stylesheet" href="<?php echo base_url('css/bootstrap.css'); ?>">
这样配置后,分页的URL会变成干净的http://localhost/project/member/2,既去掉了index.php,分页功能正常,同时Bootstrap CSS也能正确加载了。
内容的提问来源于stack exchange,提问作者Lin

