如何设置codeigniter来路由它:
/download/folder/file.ext
到这个
/download?path=folder/file.ext
?
我知道如何使用.htaccess进行操作,但是只能在CI中使用吗?我试过了
$route['download/(:any)'] = "download/index/?path=$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);
}
}
这是方法,因此根据您的具体要求进行调整。
干杯!