【问题标题】:Periods not allowed in CodeIgniter URI?CodeIgniter URI 中不允许使用句点?
【发布时间】:2013-12-10 16:47:17
【问题描述】:

所以在阅读了关于 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~%\.:_\-';

【问题讨论】:

  • 你能粘贴一个带有你的 routes.php 前缀的示例路由吗?
  • 我添加了一个示例路线。
  • 在 Exceptions 核心中抛出异常是什么意思?当我在控制器中使用 $this->uri->uri_string() 时,它会正确显示 URI。我不清楚您要做什么(而且我不会阅读您添加的链接中的那个巨大的帖子)。
  • system/core/Exceptions.php 中我添加了throw new Exception() 以查看导致404 的路由,它显示了一条没有句点的路由。我不能在我的控制器中使用uri_string(),因为 CodeIgniter 永远不会到达我的控制器。

标签: php api codeigniter rest routes


【解决方案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;
}

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

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

【讨论】:

  • 这让我更接近于弄清楚为什么会发生这种情况。问题不在于路由,正如我之前错误所说的,问题在于控制器路径正在丢失周期。
  • awsumnik,如果它不是表达式中的第一个或最后一个,则需要转义“-”符号,因此有效的正则表达式为“/^[a-z0-9:_\/.- ]+$/i"
【解决方案2】:

你有没有 (.) 在你的

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

你的控制器名称是什么?

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

类似这样的:

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

【讨论】:

  • 是的,我有 '.'在我允许的 URL 字符中。 User 是我的控制器的名称。如果我将控制器更改为1-0/User/$1,它可以工作,但不能使用句点。
  • 不是 URL 问题。 URL 可以很好地读取路由。这是控制器路径中的一个时期,它正在打破它。您可以将文件夹作为控制器名称的前缀。
【解决方案3】:

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

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

到这里:

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

对于路由器为什么要从目录名称中删除句点,有人猜测或猜想吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-22
    • 2019-07-13
    • 1970-01-01
    • 2021-06-26
    • 2012-03-26
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多