本地调用CodeIgniter项目API目录时出现404未找到错误
本地调用CodeIgniter项目API目录时出现404未找到错误
兄弟,碰到这种API调用404的情况太普遍了,我给你捋几个最容易出问题的排查点,一步步来排查:
首先先把你遇到的问题信息贴出来,方便对照:
请求的URL:
localhost:82/macroflex/app/v1/api/login
错误提示:<h1>Not Found</h1> The requested URL was not found on this server. <hr> Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.1.25 Server at localhost Port 82
1. 先确认API文件的实际路径是否匹配
CodeIgniter的控制器路径规则是application/controllers/[子目录]/[控制器类名].php,对应的方法是类里的public方法:
- 你这个URL里的
app/v1/api/login,对应的控制器应该是macroflex/application/controllers/v1/Api.php,而且里面必须有一个login()方法,并且是public权限的。 - 要是控制器文件名或者方法名写错了(比如大小写不对,哪怕Windows系统也最好统一规范),直接就会触发404。
2. 检查URL重写是否配置正确
很多时候404是因为没去掉URL里的index.php,或者Apache的rewrite模块没开:
- 先确认Apache的rewrite模块是否启用:打开Apache的
httpd.conf,找到LoadModule rewrite_module modules/mod_rewrite.so这一行,把前面的#去掉(如果有的话),然后重启Apache。 - 然后看项目根目录(也就是
macroflex文件夹)下有没有.htaccess文件,没有的话新建一个,内容用CodeIgniter标准的重写规则:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L]
- 还要确保Apache允许这个目录使用
.htaccess:在httpd.conf里找到对应项目目录的<Directory>块,把AllowOverride设为All,比如:
<Directory "你的本地项目路径/macroflex"> AllowOverride All Require all granted </Directory>
3. 检查CodeIgniter的核心配置
打开application/config/config.php:
- 确认
$config['base_url']设置正确,应该是http://localhost:82/macroflex/(注意末尾的斜杠)。 - 确认
$config['index_page']的值是空字符串"",这样才能让URL重写生效,去掉index.php。
4. 排查自定义路由是否冲突
如果你在application/config/routes.php里设置了自定义路由规则,要检查有没有和/app/v1/api/login冲突的规则,或者有没有写错路由映射(比如把login映射到了不存在的控制器/方法)。
按照上面的步骤一步步排查,应该能找到问题所在。
备注:内容来源于stack exchange,提问作者jvk




