phpenv默认不启用mod_rewrite,需手动取消httpd.conf中“loadmodule rewrite_module modules/mod_rewrite.so”注释,并将所有allowoverride none改为all,再重启apache;否则.htaccess规则无效导致404。

phpEnv 默认不启用 Apache 的 mod_rewrite,直接套用官方伪静态规则会 404 —— 必须手动开启模块并确认 .htaccess 生效。
Apache 下必须改的两个配置项
phpEnv 封装的是 Apache + PHP,但默认关闭了 URL 重写能力。光放 .htaccess 没用,得进 httpd.conf 改两处:
- 取消注释:
LoadModule rewrite_module modules/mod_rewrite.so - 把所有
AllowOverride None改成AllowOverride All(常见位置:主配置段、<directory></directory>内)
改完重启 Apache。否则无论规则怎么写,请求都会被直接拒掉,连日志都看不到 rewrite 过程。
.htaccess 规则要匹配 phpEnv 的站点路径结构
phpEnv 的网站根目录默认是 www/ 子目录,如果你把 CI 项目放在 www/myapp/ 下,RewriteBase 就不能写 /,否则重写目标会错位:
RewriteEngine On
RewriteBase /myapp/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
常见错误:
- 漏写
RewriteBase→ 所有路由 404,index.php被当成子路径拼接 - 写成
RewriteBase /但项目不在根目录 →index.php找不到,报 500 或空白页 - CI 的
$config['index_page'] = ''没关 → 即使重写成功,URL 里仍带index.php
Nginx 模式在 phpEnv 中不生效(别白折腾)
phpEnv 当前版本(截至 2026 年)只打包 Apache,**没有内置 Nginx 组件**。网上搜到的那些 location / { try_files ... } 规则,在 phpEnv 里根本没法用 —— 配置文件不是 nginx.conf,改了也 reload 不起。
如果你硬切 Nginx,等于脱离 phpEnv 管理,得自己装 LNMP 环境,此时伪静态逻辑完全换一套,和 phpEnv 无关。
验证是否真生效:看 $_SERVER 里的关键字段
别只靠浏览器地址栏“看起来没 index.php”就认为成功。在 CI 的控制器里加一行调试:
var_dump($_SERVER['REQUEST_URI'], $_SERVER['PATH_INFO']);
正常情况应看到:
-
REQUEST_URI是原始请求路径,如/user/profile/123 -
PATH_INFO是 CI 解析出的路由段,如/user/profile/123(不是空或/index.php/user/...)
如果 PATH_INFO 为空,说明 Apache 没传过去,可能因为 AcceptPathInfo Off 没开,或 FastCGI 配置漏了 PATH_INFO 传递。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











