codeigniter跨系统迁移需精准设置文件权限:writable/和uploads/目录须可写且路径合法,属主属组适配web服务用户(如www-data),权限建议700和755;public/等静态资源设755/644并禁止写入执行;application/和system/目录必须只读;ci4需确保web服务器documentroot指向public/。

CodeIgniter跨系统迁移时,文件权限设置不是简单套用777或644,关键在于区分可写目录与静态资源,同时适配目标服务器的用户组(如www-data、apache、nginx),否则会出现session失败、缓存写入报错、上传中断等问题。
writable/ 和 uploads/ 目录必须可写且路径合法
这两个目录是CI运行时写入日志、缓存、session、临时文件的核心路径。权限问题90%源于路径错误或缺少执行位(x),而非数字权限不够:
- 确保
$config['sess_save_path']使用绝对路径,推荐写法:FCPATH . 'writable/sessions/' - 手动创建目录结构:
mkdir -p /var/www/myapp/writable/sessions /var/www/myapp/uploads - 设置属主属组:
chown -R www-data:www-data /var/www/myapp/writable /var/www/myapp/uploads(根据实际Web服务用户调整) - 权限建议:
chmod 700 /var/www/myapp/writable/sessions(非777;700已足够,更安全) -
uploads/可设为755(需允许Web服务器读取上传文件,但禁止执行)
public/ 或 webroot 下的静态资源应只读
CSS、JS、图片等前端文件放在 public/(CI4)或根目录(CI3),需禁止写入和执行:
- 整个 public/ 目录建议权限
755,内部文件(.css、.js、.png等)设为644 - 禁止在 public/ 内存放敏感文件(如日志、配置片段)。若必须放,需配合
.htaccess或 Nginx location 规则拦截直接访问 - 示例
.htaccess(放于 public/logs/ 下):<ifmodule mod_rewrite.c> RewriteEngine On RewriteBase /logs/ RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^.*$ - [F,L] </ifmodule>
application/ 和 system/ 目录严禁 Web 可写
这些是框架核心代码目录,生产环境必须设为只读:
-
chmod 755 application/ system/(目录) -
chmod 644 application/config/*.php system/core/*.php(文件) - 若使用 Ion-Auth 或自定义库,确认其 config 文件未被意外写入(如
config/ion_auth.php应保持644)
CI4 的 public/ 入口模式需额外注意 root 指向
Nginx/Apache 的 DocumentRoot 必须指向 public/ 子目录,而非项目根:
- Apache:
DocumentRoot /var/www/myapp/public,且对应<directory></directory>块中含AllowOverride All - Nginx:
root /var/www/myapp/public;,并确保location /使用try_files $uri $uri/ /index.php?$query_string;
不复杂但容易忽略











