CodeIgniter配置路由后如何禁止访问映射的原实际URL
CodeIgniter 禁止原控制器路径直接访问的可行方案
以下是三种常用的实现方式,你可以根据自己的业务场景选择:
- 方案1:新增路由规则强制原路径返回404
这是改动最小的方案,直接在routes.php的现有路由规则下新增一行即可:
$route['user/User_actions/user_profile'] = function() { show_404(); };
访问原路径时会直接返回系统404页面,不会暴露路由映射逻辑。
- 方案2:控制器方法内添加访问校验
在User_actions控制器的user_profile方法开头加URI校验逻辑,只有通过自定义路由user/profile访问的请求才会正常执行:
public function user_profile() { // 获取当前请求的URI字符串 $access_uri = $this->uri->uri_string(); if ($access_uri !== 'user/profile') { show_404(); } // 原有业务逻辑写在下方 }
这种方式适合需要做额外访问权限判断的场景,可以和用户登录校验等逻辑合并。
- 方案3:将业务方法改为非公开方法,搭配重映射调用
CodeIgniter默认禁止访问控制器内以下划线开头、以及非public修饰的方法,你可以调整方法定义,配合_remap重映射逻辑实现路由调用:
class User_actions extends CI_Controller { // 重写控制器路由映射逻辑 public function _remap($method, $params = []) { if ($method === 'user_profile') { return call_user_func_array([$this, '_user_profile'], $params); } show_404(); } // 业务方法改为protected,且名称以下划线开头 protected function _user_profile() { // 原有业务逻辑写在下方 } }
这种方式安全性最高,从控制器层面彻底禁止了URL直接访问业务方法的可能。
内容的提问来源于stack exchange,提问作者Arun Bohra
相关产品推荐
相关产品推荐

