如何将控制器内不存在的方法重定向到index方法而不触发404
针对CodeIgniter框架的实现方案
你只需要在abcController中添加CI框架自带的_remap魔术方法即可,无需修改全局404配置,该配置只会对当前控制器生效,其他控制器仍会走你原有全局404逻辑:
修改后的控制器代码
Class abcController extends My_Controller { function __construct() { parent::__construct(); $this->load->library('encrypt'); } // 新增重写路由逻辑的_remap方法 public function _remap($request_method, $params = array()) { // 校验请求的方法是否在当前控制器中真实存在 if (method_exists($this, $request_method)) { // 存在则正常调用对应方法,传入参数 return call_user_func_array(array($this, $request_method), $params); } // 方法不存在时跳转到index redirect('abcController/index'); // 若希望访问URL保持不变,直接返回index页面内容,可替换为下行代码 // $this->index(); } function index() { $this->load->view('checkingOS'); } }
补充说明
_remap是CodeIgniter控制器的内置方法,优先级高于默认的URL路由解析规则,所有对当前控制器的方法请求都会先经过该方法处理- 若需要自定义跳转状态码,可以给redirect方法加第二个参数,比如
redirect('abcController/index', 'refresh', 301)实现301永久重定向
内容的提问来源于stack exchange,提问作者lauwis premium
相关产品推荐
相关产品推荐

