能去掉,但必须三处同步改对:.htaccess规则(CI3用index.php?/$1、CI4用index.php/$1)、config.php中$config['index_page'] = ''及uri_protocol/base_url等关联配置、Apache的AllowOverride All与mod_rewrite启用。

CodeIgniter 的隐藏配置技巧不是为了炫技,而是直击开发中反复出现的几个“卡点”问题。用对了,能省掉大量调试时间。
URL 中老带 index.php?三处联动才能真隐藏
很多人改完 $config['index_page'] = '' 就以为搞定了,结果首页能打开,点链接全 404。其实这是典型配置割裂:
- .htaccess 规则必须匹配 CI 版本:CI3 用
index.php?/$1,CI4 必须用index.php/$1(不能带问号) - Apache 必须启用 mod_rewrite 模块,且虚拟主机配置里要设
AllowOverride All,否则 .htaccess 被无视 - CI4 的入口在
public/目录,.htaccess 要放在 public 下,不是项目根目录
本地开发 URL 错乱?base_url 和 uri_protocol 得配合调
部署到子目录或换域名后,生成的链接变成 http://localhost//assets/css/style.css 或路由识别失败,常因这两个配置没同步:
-
$config['base_url']建议写死完整路径,比如https://dev.local/myapp/,别依赖自动推导 -
$config['uri_protocol']在 Apache 下通常用AUTO即可;若遇到路由参数丢失,可试PATH_INFO(CI3)或REQUEST_URI(部分 Nginx 环境) - CI4 不再读取 config.php 中的 base_url,改由
APP_URL环境变量或public/index.php控制,沿用 CI3 写法会失效
生产环境敏感信息暴露?靠 ENVIRONMENT 常量切换
上线后 PHP 错误堆栈直接打在页面上,或数据库密码明文写在 config 文件里,都是安全隐患。隐藏配置在这里起作用:
- 把
index.php顶部的define('ENVIRONMENT', 'development');改为'production',自动关闭错误显示、禁用调试模式 - 数据库密码、API 密钥等敏感项,应从环境变量(如
getenv('DB_PASSWORD'))读取,而不是硬编码在database.php - 开启 CSRF 保护只需在
app/Config/Security.php(CI4)或application/config/config.php(CI3)中设$config['csrf_protection'] = TRUE;,框架自动生成并校验 token
表单提交总被拦截?XSS 和 CSRF 配置有讲究
用户发个带引号的昵称就报错,或编辑页面刷新后提示“CSRF 失败”,其实是过滤和防护策略没配准:
- XSS 过滤只应在输出时用(如
html_escape($data)),不要在验证规则里加xss_clean——它会破坏原始输入,比如删掉用户想存的 Markdown 符号 - CSRF token 必须随每个非 GET 表单一起提交,CI 自动在
$this->security->get_csrf_hash()和隐藏字段中生成,漏掉就 403 - 如果用了 AJAX 提交,需从页面 meta 标签或响应头中提取 token,并在请求头(
X-CSRF-TOKEN)或数据体中带上


















