CodeIgniter在Nginx上伪静态核心是用try_files将非静态请求兜底至index.php,并正确传递PATH_INFO;需确保root指向项目根目录、SCRIPT_FILENAME用$realpath_root、禁用index_page且防护敏感目录。

CodeIgniter在Nginx上配置伪静态,核心是让所有非真实文件/目录的请求都交由index.php统一处理,同时确保PHP能正确解析PATH_INFO(即路由段)。关键不在于写多复杂的规则,而在于匹配逻辑清晰、避免冲突、适配部署路径。
Nginx主目录部署(推荐标准写法)
适用于CI项目直接放在网站根目录(如/var/www/html/)的情况。用try_files替代if判断,更安全高效:
- 在
server块内的location /中添加:
try_files $uri $uri/ /index.php?$query_string;
}
- 确认PHP处理块含关键参数:
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;(不能写成$document_root) -
root指令必须指向CI项目根目录(不是public子目录,CI本身无public结构)
子目录部署(如/example/)
当CI程序放在子目录(比如域名后路径为https://site.com/myapp/),需显式保留前缀:
- 方法一:独立
location块(推荐)
if (!-e $request_filename) {
rewrite ^/myapp/(.*)$ /myapp/index.php?/$1 last;
}
}
- 方法二:修改主
try_files(需入口文件路径一致)
try_files $uri $uri/ /myapp/index.php?$query_string;
}
- 注意:
index.php实际路径必须是/myapp/index.php,且base_url()等配置要同步调整
必须同步检查的三项
规则写了≠能用,以下三点漏一项就可能404或白屏:
-
PHP是否开启
pathinfo:LNMP一键包默认已开;手动编译需确认php.ini中cgi.fix_pathinfo=1 -
CI配置是否关闭
index_page:在application/config/config.php中设$config['index_page'] = ''; -
禁止敏感目录被直接访问:加一段防护规则防止
application/、system/等目录暴露
return 403;
}
常见问题快速排查
如果配置后仍出错,优先看这三处:
- 访问
/index.php/welcome能打开但/welcome404 → 伪静态规则未生效,检查location /是否被其他规则覆盖 - 页面空白或报
PathInfo is empty→fastcgi_param SCRIPT_FILENAME写错,或pathinfo未启用 - 图片/CSS加载失败 →
try_files未包含$uri/,导致目录请求没 fallback 到索引页


















