PHP Codeigniter HMVC扩展路由迁移后动态路由404问题如何解决
问题根因梳理
- Apache配置未开启.htaccess解析权限,重写规则完全不生效
- 现有.htaccess的重写规则不兼容新服务器的PHP运行模式(多为FastCGI模式导致PATH_INFO传递失败)
- Codeigniter核心配置中的URI协议自动识别失败,无法正确解析请求路径
- 新服务器大小写敏感,旧环境的不规范命名(控制器/模块目录大小写不匹配)触发404
- HMVC扩展的目录、配置在迁移后出现路径不匹配、权限不足的问题
解决方案
前置排查(快速定位问题范围)
先访问带index.php的测试地址:http://example.com/index.php/miniapp/user/
如果该地址可正常访问,说明问题仅出在重写规则/Apache配置,可直接执行步骤1、2,否则继续执行后续步骤。
步骤1:配置Apache支持.htaccess
- 编辑站点对应的Apache配置文件(通常为
/etc/httpd/conf/httpd.conf或/etc/apache2/sites-available/站点名.conf) - 找到站点根目录对应的
<Directory>配置段,将AllowOverride None修改为AllowOverride All - 确认rewrite模块已启用:Debian/Ubuntu执行
a2enmod rewrite,CentOS/RHEL取消httpd.conf中LoadModule rewrite_module modules/mod_rewrite.so前的注释 - 重启Apache服务生效
步骤2:修正.htaccess重写规则
将原有.htaccess内容替换为适配FastCGI模式的规则:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?/$1 [L]
步骤3:调整CI URI协议配置
打开application/config/config.php,修改URI协议配置项:
// 原有默认值为AUTO,修改为REQUEST_URI适配Linux环境 $config['uri_protocol'] = 'REQUEST_URI';
步骤4:核对大小写与命名规范
Linux环境对文件/目录名大小写敏感,需确认:
- 路由规则中映射的模块名,和
application/modules下的目录名大小写完全一致 - 模块下的控制器文件名首字母大写(例如
Miniapp.php而非miniapp.php),且类名和文件名一致 - 控制器继承自
MX_Controller,无语法错误
步骤5:验证HMVC配置
- 确认
application/third_party/MX目录完整,目录权限为可读 - 确认
application/config/config.php中的$config['modules_locations']配置的模块路径和实际迁移后的路径完全匹配
内容的提问来源于stack exchange,提问作者Ishaan Puniani
相关产品推荐
相关产品推荐

