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

Codeigniter项目迁移至localhost报错:静态资源404问题求助

CodeIgniter项目从线上迁移到本地后静态资源404问题排查与完整迁移步骤

我帮你梳理下这个问题的排查方向、解决办法,还有完整的迁移步骤——这些都是实际迁移CI项目时踩过的坑,应该能帮到你:

一、可能的问题原因

咱们先拆解下为啥会出现静态资源404,哪怕你觉得路径没问题:

  • .htaccess配置不兼容:线上主机一般默认开了URL重写,但本地Apache可能没启mod_rewrite模块,或者.htaccess里的规则没适配本地目录结构,导致静态资源请求被CI的路由接管,返回404
  • 静态资源路径硬编码:有些模板里可能直接写死了线上域名的绝对路径(比如http://your-online-site.com/css/style.css),你改了base_url但没替换这些硬编码的内容,自然找不到本地文件
  • base_url或文档根目录设置错了:如果你的项目放在localhost的子目录(比如localhost/my_ci_app),但base_url只设了http://localhost/,静态资源就会指向服务器根目录,而不是你的项目文件夹
  • 文件权限问题:这个在Windows本地环境少见,但如果是Linux/Mac的本地服务器,静态资源文件夹的权限可能不够,服务器读不到文件
  • URL重写规则没排除静态资源:.htaccess里的规则如果没跳过css、js这类目录,请求静态资源时会被转到CI的index.php,导致框架返回404

二、针对性解决方法

1. 搞定.htaccess和URL重写

如果用的是Apache:

  • 先启mod_rewrite模块:
    • WAMP:左键点托盘图标→Apache→Apache Modules→勾选rewrite_module,重启Apache
    • XAMPP:打开控制面板→Apache→Config→打开httpd.conf,找到#LoadModule rewrite_module modules/mod_rewrite.so,删掉前面的#,保存后重启Apache
  • 调整.htaccess规则,一定要排除静态资源目录(比如你的静态文件在assets文件夹):
RewriteEngine On
RewriteBase /你的项目子目录/ # 比如本地是/my_ci_app/,根目录就写/

# 跳过静态资源文件夹,不让CI路由处理
RewriteCond %{REQUEST_URI} !^/(assets|css|js|img)/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

如果是Nginx环境,对应的配置要调整:

location / {
    try_files $uri $uri/ /index.php?$args;
}

# 直接处理静态资源,不经过CI
location ~* \.(css|js|png|jpg|jpeg|gif|ico)$ {
    expires 1y;
    add_header Cache-Control "public, immutable";
}

2. 统一静态资源引用方式

别再用硬编码的绝对路径了,改用CI自带的base_url()辅助函数生成路径:
比如原来的:

<link rel="stylesheet" href="http://your-online-site.com/css/style.css">

改成:

<link rel="stylesheet" href="<?php echo base_url('css/style.css'); ?>">

同时检查application/config/config.php里的base_url是否正确:

# 子目录的情况
$config['base_url'] = 'http://localhost/my_ci_app/';
# 根目录的情况
$config['base_url'] = 'http://localhost/';

注意末尾的斜杠一定要加上,不然路径会出错。

3. 修正服务器文档根目录配置

如果你的项目放在服务器根目录的子文件夹里(比如XAMPP的htdocs/my_ci_app),除了base_url要设对,.htaccess里的RewriteBase也要对应这个子目录,不然重写规则会找不到文件。

4. 检查文件权限(Linux/Mac环境)

如果是Linux或Mac本地服务器,执行下面的命令给静态资源文件夹加权限:

chmod -R 755 /path/to/your/ci_project/assets
chown -R www-data:www-data /path/to/your/ci_project/assets # 适配Apache用户组

5. 临时排查:开启index_page

如果上面的方法都不行,可以临时修改application/config/config.php:

$config['index_page'] = 'index.php';

然后访问静态资源时带上index.php,比如http://localhost/my_ci_app/index.php/css/style.css,如果能访问,说明就是URL重写的问题,回到第一步重新排查。

三、完整的CodeIgniter本地迁移步骤

为了以后迁移不踩坑,给你整理一套标准步骤:

  1. 备份线上数据
    • 下载线上整个CI项目文件夹到本地
    • 用phpMyAdmin或mysqldump命令导出线上数据库的SQL文件
  2. 搭建本地环境
    • 安装WAMP/XAMPP/MAMP这类集成环境,确保Apache/Nginx、PHP、MySQL正常运行
    • 把下载的项目文件夹放到本地服务器的根目录(比如XAMPP的htdocs)
  3. 配置数据库
    • 打开application/config/database.php,修改为本地数据库信息:
      $db['default']['hostname'] = 'localhost';
      $db['default']['username'] = 'root'; # 本地数据库用户名
      $db['default']['password'] = '你的本地数据库密码';
      $db['default']['database'] = '本地创建的数据库名'; # 先在phpMyAdmin创建同名数据库
      
    • 导入之前导出的SQL文件到本地数据库
  4. 设置base_url
    • 打开application/config/config.php,根据项目位置设置正确的base_url,记得加末尾斜杠
  5. 配置URL重写
    • 开启本地服务器的URL重写模块,调整.htaccess规则(参考前面的示例)
  6. 替换静态资源路径
    • 全局搜索项目中的硬编码线上路径,全部替换为base_url()拼接的形式
  7. 测试访问
    • 打开浏览器访问本地项目地址,用F12开发者工具查看Network标签,确认静态资源请求路径是否正确,有没有404

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:18:23