Linux下CodeIgniter因文件系统大小写敏感导致500错误:控制器文件名(如Member.php)与类名(class Member)须严格一致;URL路由段(如/member/index)必须全小写;模型文件名首字母大写(Membermodel.php),加载时用小写字符串,类定义需匹配。

CodeIgniter在Windows开发环境能正常跳转,部署到Linux服务器后点击链接报500错误、路由失效、控制器找不到——这不是配置遗漏,而是文件系统大小写敏感性差异直接触发的命名冲突。
检查控制器类名与文件名是否严格一致
Linux文件系统区分大小写,而Windows不区分。若控制器文件名为 Member.php,但类定义为 class member extends CI_Controller,Linux下将无法加载该类。
打开应用目录下的 application/controllers/ 文件夹,确认每个控制器PHP文件名首字母大写(如 Member.php),且内部类名完全匹配(class Member extends CI_Controller)。
这一步必须手动逐个核对,IDE自动重命名可能只改类名不改文件名,或反之。
验证URL中路由段是否全小写
CodeIgniter默认路由规则依赖于URI段与控制器/方法名的精确匹配。Linux环境下,访问 /index.php/Member/index 会失败,必须是 /index.php/member/index。
检查所有前端链接、重定向语句、AJAX请求URL,确保控制器段全部使用小写字母。
在 Windows 11 上"直接发声"的 TTS(从 WSL2/TUI 调用 powershell.exe + System.Speech)。适用于用户说"说出来/读出来/语音播报/用TTS",或反馈"没声音/tts 生成的 mp3 是空的/播不出来",以及需要中文语音但 OpenClaw 内置 tts 不可用时。
【关键前提】CI 3.x 默认关闭 URI 路由的大小写忽略功能,没有开关可开启——必须统一用小写路径调用控制器。
修正自动加载的模型与库命名
第一步:打开 application/models/ 目录,将 membermodel.php 改为 Membermodel.php(首字母大写,符合CI命名惯例);
第二步:在控制器中加载时,保持小写字符串参数:$this->load->model('membermodel'); ——CI自动将小写模型名映射到首字母大写的文件名;
第三步:检查模型内部类定义,必须为 class Membermodel extends CI_Model,否则Linux下类加载失败,引发500错误。
注意:模型文件名大小写错误不会在Windows报错,但在Linux会导致 Class 'Membermodel' not found 致命错误。


















