Periods not allowed in CodeIgniter URI?

寵の児 提交于 2019-12-04 06:30:11

问题


So after reading this question on API versioning, I decided to prefix all my routes with a version number:

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

But when I throw an exception within Exceptions Core, it says that the route is:

10/UserControll...

I've tried escaping the period, but this did not work. Can anyone replicate this problem and think of a possible solution for it?

This is the route I am using for the above:

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

These are my permitted URI chars:

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

回答1:


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;
}

Check if this has '.' in the preg_match. If not add it, so that your regular expression look like this-

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



回答2:


Do you have the (.) in your

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

And what is your controller name ?

I think you must have the controller name in your route before the method name.

Something like this :

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



回答3:


The problem is on line 468 of system/core/Router.php. Change set_directory from this:

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

To this:

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

Anyone have a guess or gander as to why the Router removes periods from directory names?



来源:https://stackoverflow.com/questions/20201888/periods-not-allowed-in-codeigniter-uri

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!