You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

  1. 编辑站点对应的Apache配置文件(通常为/etc/httpd/conf/httpd.conf或/etc/apache2/sites-available/站点名.conf)
  2. 找到站点根目录对应的<Directory>配置段,将AllowOverride None修改为AllowOverride All
  3. 确认rewrite模块已启用:Debian/Ubuntu执行a2enmod rewrite,CentOS/RHEL取消httpd.conf中LoadModule rewrite_module modules/mod_rewrite.so前的注释
  4. 重启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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 19:45:03