CodeIgniter控制器product方法访问报404其他名称正常如何解决
问题产生原因
这个是CodeIgniter 4框架的典型路径匹配冲突问题,常见触发原因有两类:
- Web服务器静态资源优先匹配:项目
public目录下存在和路径重名的文件/文件夹,比如名为product的文件夹、product.php、product.html类静态资源,Apache/Nginx默认会优先响应实际存在的静态资源,不会将请求转发给框架入口文件,直接返回404。 - 框架路由规则冲突:
- 手动配置的路由存在优先级更高的模糊匹配规则,比如
$routes->get('shop/(:any)', ...)规则提前捕获了shop/product请求,指向了不存在的处理逻辑 - 关闭了框架自动路由功能,未手动配置
shop/product对应的路由规则 - 存在同名的全局路由、资源路由提前占用了
shop/product路径
- 手动配置的路由存在优先级更高的模糊匹配规则,比如
解决方法
按优先级依次排查处理即可:
- 先确认404的返回来源:开启框架调试模式后访问
/shop/product,如果是Web服务器默认的404页面,直接去public目录删除/重命名和product重名的文件/文件夹即可;如果是框架返回的404页面,走后续路由排查步骤。 - 打开
app/Config/Routes.php调整路由配置:- 若开启了自动路由,检查所有路由规则,把
shop/product的精确匹配规则放在所有模糊匹配shop/前缀的规则前面,示例:// 精确规则放前面 $routes->get('shop/product', 'Shop::product'); // 模糊规则放后面 $routes->get('shop/(:any)', 'Shop::$1'); - 若关闭了自动路由,手动添加上述精确路由规则即可。
- 若开启了自动路由,检查所有路由规则,把
- 若上述操作都无效,检查
app/Config/Filters.php的过滤器配置,确认没有规则拦截了shop/product路径的请求。
内容的提问来源于stack exchange,提问作者Danilo Souza
相关产品推荐
相关产品推荐

