因此,在阅读有关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~%\.:_\-';
答案 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).'/';
有人猜测路由器为什么会从目录名中删除句点?