Codeigniter重定向 - 您提交的URI不允许使用字符

sub*_*rui 16 php codeigniter

当我试图重定向到其他网站时,我收到此错误:

遇到PHP错误

严重性:警告

消息:parse_url(/%22**)[function.parse-url]:无法解析URL

文件名:core/URI.php

行号:219


遇到了错误

所提交的网址带有不被接受的字符.


这是我在URI.php中的所有代码

private function _detect_uri()
{
    if ( ! isset($_SERVER['REQUEST_URI']) OR ! isset($_SERVER['SCRIPT_NAME']))
    {
        return '';
    }

    $uri = $_SERVER['REQUEST_URI'];
    if (strpos($uri, $_SERVER['SCRIPT_NAME']) === 0)
    {
        $uri = substr($uri, strlen($_SERVER['SCRIPT_NAME']));
    }
    elseif (strpos($uri, dirname($_SERVER['SCRIPT_NAME'])) === 0)
    {
        $uri = substr($uri, strlen(dirname($_SERVER['SCRIPT_NAME'])));
    }

    // This section ensures that even on servers that require the URI to be in the query string (Nginx) a correct
    // URI is found, and also fixes the QUERY_STRING server var and $_GET array.
    if (strncmp($uri, '?/', 2) === 0)
    {
        $uri = substr($uri, 2);
    }
    $parts = preg_split('#\?#i', $uri, 2);
    $uri = $parts[0];
    if (isset($parts[1]))
    {
        $_SERVER['QUERY_STRING'] = $parts[1];
        parse_str($_SERVER['QUERY_STRING'], $_GET);
    }
    else
    {
        $_SERVER['QUERY_STRING'] = '';
        $_GET = array();
    }

    if ($uri == '/' || empty($uri))
    {
        return '/';
    }

    $uri = parse_url($uri, PHP_URL_PATH);

    // Do some final cleaning of the URI and return it
    return str_replace(array('//', '../'), '/', trim($uri, '/'));
}
Run Code Online (Sandbox Code Playgroud)

Suv*_*ker 49

CodeIgniter检查所有URI段是否有不允许的字符.这通过白名单允许的字符来实现.允许哪些允许/system/application/config/config.php$config['permitted_uri_chars']变量中签入.permitted_uri_chars是CodeIgniter在您的URI中接受的字符.默认值设置为类似.

$config['permitted_uri_chars'] = 'a-z 0-9~%.:&_\-'; 
Run Code Online (Sandbox Code Playgroud)

默认情况下,只允许这些: a-z 0-9~%.:_-

留空以允许所有角色 - 但只有在你疯了的时候.

%22来吧."您可以在permitted_uri_chars列表中添加此内容.


Nil*_*l'z 5

尝试此操作可能会有所帮助,但not recommended对您的application/config/config.php更改有所帮助:

$config['permitted_uri_chars']  = ''; #keep it blank to allow all characters
$config['allow_get_array']       = TRUE;
$config['enable_query_strings'] = TRUE;
Run Code Online (Sandbox Code Playgroud)

  • 这实际上甚至不是一个选择,我认为这对于不熟悉php的新手或不了解安全性的人来说是不好的教育。 (3认同)