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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:06:03