Codeigniter路由器将url段作为$ _GET查询传递

时间:2012-02-05 21:04:49

标签: codeigniter url routing

如何设置codeigniter来路由它:

/download/folder/file.ext

到这个

/download?path=folder/file.ext

我知道如何使用.htaccess进行操作,但是只能在CI中使用吗?我试过了

$route['download/(:any)'] = "download/index/?path=$1"; 

没用...... 感谢

1 个答案:

答案 0 :(得分:1)

我建议你改变你对CI路由器课程的看法(这对我来说从“重写”方法转向“路由器”方法是最困难的事情。)

您的问题采用“重写”方法,以及如何使用.htaccess文件处理它:

RewriteRule ^/download/(.*)$ index.php/download/?path=$1 [L]

根据这种方法,您将拥有仅匹配“/ download”部分的路线,然后您将在控制器操作中使用$this->input->get('path')

“路由”方法使.htaccess文件保持不变,并更改您的$ routes配置,以及控制器“获取”该信息的方式,如果您将:

<?php
// config/routes.php change:
$routes['download/(:any)'] = 'download/index/$1';

// controllers/download.php:
class Download extends CI_Controller {
    public function index($folder, $file)
    {
        // if the folder is "flat" (i.e. no subfolders),
        // you can simply use $folder and $file
        var_dump($folder);
        var_dump($file);

        // otherwise, $file is the last segment ("n"),
        // and folder is segments 2 through n
        $segments = $this->uri->segment_array();
        $folder = implode('/', array_slice($segments, 2, -1);
        $file   = end($segments);

        // full path is always $folder and $file appended
        $path = $folder.'/'.$file;
        var_dump($path);
    }
}

这是方法,因此根据您的具体要求进行调整。

干杯!