如何使CodeIgniter接受"查询字符串"URL?

zih*_*oyu 4 php codeigniter codeigniter-url

根据CI的文档,CodeIgniter使用基于段的方法,例如:

example.com/my/group
Run Code Online (Sandbox Code Playgroud)

如果我想找到一个特定的组(id = 5),我可以访问

example.com/my/group/5
Run Code Online (Sandbox Code Playgroud)

在控制器中,定义

function group($id='') {
    ...
    }
Run Code Online (Sandbox Code Playgroud)

现在我想使用传统的方法,CI称之为"查询字符串"URL.例:

example.com/my/group?id=5
Run Code Online (Sandbox Code Playgroud)

如果我直接转到此URL,则会找不到404页面.那我怎么能启用呢?

小智 9

为了可靠地使用查询字符串,我发现你需要做3件事

  1. application/config/config.php集合中$config['enable_query_strings'] = true;
  2. 再次在application/config/config.php集合中$config['uri_protocol'] = "PATH_INFO";
  3. 更改.htaccess以删除?(如果存在)在重写规则中

我使用以下内容

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
Run Code Online (Sandbox Code Playgroud)


Nas*_*uig 6

//Add this method to your (base) controller :
protected function getQueryStringParams() {
    parse_str($_SERVER['QUERY_STRING'], $params);
    return $params;
}


// Example : instagram callback action
public function callback()
{
    $params = $this->getQueryStringParams();
    $code = !empty($params['code']) ? $params['code'] : '';

    if (!empty($code))
    {
        $auth_response = $this->instagram_api->authorize($code);

        // ....  
    }

    // .... handle error
}    
Run Code Online (Sandbox Code Playgroud)