CodeIgniter 去掉 index.php 需框架配置、Web服务器支持、项目文件规则三端协同:清空 index_page、启用 mod_rewrite 或配置 try_files、设置正确 .htaccess 或 Nginx 规则。

确认并清空 index_page 配置
打开 application/config/config.php,找到这行:
$config['index_page'] = 'index.php';
改为:
$config['index_page'] = '';
这是告诉 CodeIgniter 不要在 URL 中自动拼接 index.php。同时建议设置 URI 协议为更稳定的选项:
-
$config['uri_protocol'] = 'AUTO';(默认,多数情况可用) - 若遇到路径解析异常,可尝试:
'PATH_INFO'或'REQUEST_URI'
Apache 环境:启用 mod_rewrite 并放行 .htaccess
仅写 .htaccess 文件是不够的——Apache 必须允许它生效:
- 编辑
httpd.conf或虚拟主机配置,确保有这一行已取消注释:LoadModule rewrite_module modules/mod_rewrite.so - 找到对应网站目录的
<Directory>块,把AllowOverride None改为:AllowOverride All
然后在项目根目录(与 application 同级)创建或修改 .htaccess 文件:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
⚠️ 注意:如果你的项目不在域名根目录(比如放在 http://example.com/ci/),则 RewriteRule 要改成:RewriteRule ^(.*)$ /ci/index.php/$1 [L]
Nginx 环境:替换 rewrite 逻辑为 try_files
Nginx 不支持 .htaccess,需直接修改站点配置(如 /etc/nginx/sites-available/your-site):
- 在
location /块中加入:try_files $uri $uri/ /index.php?$query_string; - 确保 PHP 处理块包含
fastcgi_split_path_info,让 PATH_INFO 正确传递:
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
改完记得重启 Nginx:sudo systemctl restart nginx
验证是否真正生效
别只测首页,用明确路由验证:
- 先确认默认控制器能访问:
http://yoursite.com/→ 应显示欢迎页 - 再试自定义路由:
http://yoursite.com/about(前提是$route['about'] = 'pages/view/about';已配好) - 如果仍报 404,查看 Apache/Nginx 错误日志,大概率是
AllowOverride未开 或try_files路径写错
不复杂但容易忽略。


















