You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter中.htaccess配置下分页及CSS加载问题求助

解决CodeIgniter分页与静态资源加载的冲突问题

我来帮你拆解这个问题——其实核心是CodeIgniter的路由重写和静态资源路径的配合问题,咱们一步步理顺解决:

一、先搞定分页失效的问题(base_url设为不带index的情况)

你遇到的分页失效,本质是分页生成的URL没被正确路由到控制器方法。咱们从这几个点排查:

  1. 确认.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设置里勾选即可)。

  2. 配置路由映射
    当你把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';
    
  3. 调整分页的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/下面,自然加载失败。

有两个简单的解决方法:

  1. 使用绝对路径加载静态资源
    直接用项目根路径开头的绝对路径,或者用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
    
  2. 设置HTML的base标签
    在页面的<head>里添加一个base标签,指定所有相对路径的基准URL:

    <base href="<?php echo base_url(); ?>">
    

    这样页面里所有的相对路径(比如css/bootstrap.css)都会自动解析成http://localhost/project/css/bootstrap.css,不管当前URL是什么层级都不会出错。

三、整合最优配置

把上面的步骤整合起来,最终的正确配置应该是这样的:

  1. 全局配置(config.php)

    $config['base_url'] = 'http://localhost/project/';
    $config['index_page'] = '';
    
  2. 路由配置(routes.php)

    $route['member/(:num)'] = 'member/index/$1';
    
  3. 控制器分页代码

    $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);
    
  4. 页面加载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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:37:34