The URI you submitted has disallowed characters.
このエラーをインターセプトするにはどうすればよいですか?それらはcallback_
機能ですか?このエラーは、URLで=を使用しようとすると発生します。たとえば、1=1とすると-このエラーが発生します。エラーページの代わりにredirect('main/cate/page');
「エラーが発生しましたページ」を表示する代わりに、このエラーをキャッチしてリダイレクトするにはどうすればよいですか?
The URI you submitted has disallowed characters.
このエラーをインターセプトするにはどうすればよいですか?それらはcallback_
機能ですか?このエラーは、URLで=を使用しようとすると発生します。たとえば、1=1とすると-このエラーが発生します。エラーページの代わりにredirect('main/cate/page');
「エラーが発生しましたページ」を表示する代わりに、このエラーをキャッチしてリダイレクトするにはどうすればよいですか?
エラーがスローされているよう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);
}
}
注:これは、「codeigniterに表示されるエラーを変更する方法」という基本的な質問をカバーしています。この特定のエラーには、より具体的なオーバーライドがある可能性があります。