CodeIgniter URI中不允许的时间段?

时间:2013-11-25 19:46:46

标签: php api codeigniter rest routes

因此,在阅读有关API版本控制的this question后,我决定在所有路由前加上版本号:

http://localhost/api/1.0/user/login

但是当我在Exceptions Core中抛出一个异常时,它表示该路由是:

10/UserControll...

我试过逃避这个时期,但这没有用。任何人都可以复制这个问题并考虑一个可能的解决方案吗?

这是我正在使用的路线:

$route['1.0/user/(:any)'] = '1.0/UserController/$1';

这些是我允许的URI字符:

$config['permitted_uri_chars'] = 'a-z 0-9~%\.:_\-';

3 个答案:

答案 0 :(得分:2)

Open libraries/Input.php (system/core/Input.php in CI version 2.0+) and locate function _clean_input_keys($str){, The whole block should look like so:

function _clean_input_keys($str)
{
    if ( ! preg_match("/^[a-z0-9:_\/-]+$/i", $str))
    {
        exit('Disallowed Key Characters.');
    }

    return $str;
}

检查这是否有'。'在preg_match中。 如果没有添加它,那么你的正则表达式看起来像这样 -

/^[a-z0-9:_\/-\.]+$/i

答案 1 :(得分:1)

你的

中有(。)吗?
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';

你的控制器名称是什么?

我认为你必须在方法名称之前的路线中有控制器名称。

这样的事情:

$route['controller_name/1.0/user/(:any)'] = ...

答案 2 :(得分:1)

问题出在system/core/Router.php的第468行。从此更改set_directory

$this->directory = str_replace(array('/', '.'), '', $dir).'/';

对此:

$this->directory = str_replace(array('/'), '', $dir).'/';

有人猜测路由器为什么会从目录名中删除句点?