The URI you submitted has disallowed characters.
Как перехватить эту ошибку? Является ли их функцией callback_
? Эта ошибка возникает, когда я пытаюсь использовать a = в URL. Например, я ставлю 1 = 1 – я получаю эту ошибку. Вместо страницы с ошибкой я хочу redirect('main/cate/page');
Как я могу поймать эту ошибку и перенаправить вместо отображения «Ошибка была обнаружена страница»
Похоже, что ошибка system/core/URI.php
в system/core/URI.php
. К счастью, вы можете расширить основные классы . Создайте файл в application/core
MY_URI.php
и переопределите функцию:
class MY_URI extends CI_URI{ function __construct(){ parent::__construct(); } function _filter_uri($str){ if ($str != '' && $this->config->item('permitted_uri_chars') != '' && $this->config->item('enable_query_strings') == FALSE) { // preg_quote() in PHP 5.3 escapes -, so the str_replace() and addition of - to preg_quote() is to maintain backwards // compatibility as many are unaware of how characters in the permitted_uri_chars will be parsed as a regex pattern if ( ! preg_match("|^[".str_replace(array('\\-', '\-'), '-', preg_quote($this->config->item('permitted_uri_chars'), '-'))."]+$|i", $str)) { redirect('main/cate/page'); } } // Convert programatic characters to entities $bad = array('$', '(', ')', '%28', '%29'); $good = array('$', '(', ')', '(', ')'); return str_replace($bad, $good, $str); } }
Вам необходимо расширить файл CI_Exceptions. Это сообщение на форуме имеет хорошую информацию об исключениях и обработке ошибок.
http://codeigniter.com/forums/viewthread/67096/
Что-то похожее на это переопределение должно позволить вам перенаправлять на основе кода ошибки:
<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); class OOR_Exceptions extends CI_Exceptions { public function show_error($heading, $message, $template = '', $status_code = 500) { $ci =& get_instance(); if (!$page = $ci->uri->uri_string()) { $page = 'home'; } switch($status_code) { case 403: $heading = 'Access Forbidden'; break; case 404: $heading = 'Page Not Found'; break; case 503: $heading = 'Undergoing Maintenance'; break; } log_message('error', $status_code . ' ' . $heading . ' --> '. $page); if ($status_code == 404) { redirect('/mypage'); } return parent::show_error($heading, $message, 'error_general', $status_code); } }
ПРИМЕЧАНИЕ. Это касается основного вопроса – «как изменить ошибку, отображаемую в кодеигниторе». Там, возможно, более конкретные переопределения для этой конкретной ошибки.