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

CodeIgniter 3生产服务器部署问题:请求重定向及Session异常

嘿,我来帮你排查这两个头疼的问题——静态资源被重定向到首页、Session失效,这俩在CodeIgniter生产部署时确实挺常见的,咱们一步步来解决:

一、解决所有请求重定向到首页的问题

这个问题大概率是URL重写规则没写对,导致静态资源也被转发到了CodeIgniter的入口文件,先从这几个关键点排查:

  • 检查config.php的核心配置
    首先确保基础URL和入口页设置正确:

    // 替换成你的实际域名,末尾要加斜杠
    $config['base_url'] = 'http://XXXXX.local/';
    // 空字符串表示用.htaccess去掉index.php
    $config['index_page'] = '';
    
  • 修正.htaccess的重写规则(重点!)
    很多人写的规则会把已存在的静态文件也重定向到首页,正确的规则应该只转发「不存在的文件/目录」到index.php,这样assets下的js、css就能直接被服务器返回:

    RewriteEngine On
    RewriteBase /
    
    # 跳过已存在的文件和目录(这两行是关键!)
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    
    # 把请求转发到index.php处理
    RewriteRule ^(.*)$ index.php/$1 [L]
    

    注意:如果你的项目部署在子目录里,RewriteBase要改成对应的路径,比如/my-project/。

  • 确认Apache虚拟主机配置
    必须开启AllowOverride All,否则.htaccess的规则根本不会生效:

    <VirtualHost *:80>
        ServerName XXXXX.local
        # 这里要指向包含index.php的项目根目录
        DocumentRoot /var/www/html/your-codeigniter-project
    
        <Directory /var/www/html/your-codeigniter-project>
            Options Indexes FollowSymLinks
            AllowOverride All # 一定要开这个
            Require all granted
        </Directory>
    
        ErrorLog ${APACHE_LOG_DIR}/ci-project-error.log
        CustomLog ${APACHE_LOG_DIR}/ci-project-access.log combined
    </VirtualHost>
    

    改完配置后记得重启Apache:sudo systemctl restart apache2

二、解决Session无法正常工作的问题

Session失效通常和存储路径权限、配置参数有关,按下面步骤排查:

  • 检查config.php的Session配置
    以文件存储驱动为例,确保这些参数设置正确:

    $config['sess_driver'] = 'files';
    // 这个目录要手动创建,并且给Apache用户读写权限
    $config['sess_save_path'] = APPPATH . 'sessions/';
    $config['sess_cookie_name'] = 'ci_session';
    $config['sess_expiration'] = 7200;
    // 域名前加个点,方便子域名共享(如果有的话)
    $config['cookie_domain'] = '.XXXXX.local';
    $config['cookie_path'] = '/';
    $config['cookie_secure'] = FALSE; // 生产环境用HTTPS的话改成TRUE
    $config['cookie_httponly'] = TRUE;
    
  • 修复Session存储目录的权限
    如果用文件驱动,application/sessions/目录必须让Apache的运行用户(通常是www-data)能读写:

    sudo chown -R www-data:www-data /var/www/html/your-codeigniter-project/application/sessions
    sudo chmod -R 700 /var/www/html/your-codeigniter-project/application/sessions
    
  • 确保Session库正确加载
    要么在config/autoload.php里自动加载:

    $autoload['libraries'] = array('session');
    

    要么在控制器里手动加载:

    $this->load->library('session');
    

    另外设置和读取Session的语法要正确:

    // 设置Session
    $this->session->set_userdata('user_id', 123);
    // 读取Session
    echo $this->session->userdata('user_id');
    

如果按上面的步骤操作后还是有问题,建议去看Apache的错误日志(/var/log/apache2/ci-project-error.log)和CodeIgniter的日志(application/logs/),里面会有更详细的报错信息,帮你精准定位问题。

内容的提问来源于stack exchange,提问作者notnotundefined

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:08:51