Я призываю вас изменить свою точку зрения на то, что делает класс CI Router (для меня это было наиболее трудным переходом от подхода «перезаписи» к подходу «маршрутизатора»).
Ваш вопроспредполагает подход «переписывания», и вот как это можно сделать с помощью файла .htaccess:
RewriteRule ^/download/(.*)$ index.php/download/?path=$1 [L]
При этом подходе у вас будет маршрут, соответствующий только части «/ download», изатем вы будете использовать $this->input->get('path')
в действии контроллера.
Подход "маршрутизации" сохраняет файл .htaccess таким же, и изменяет конфигурацию вашего маршрута, а также то, как контроллер "получает" эту информацию, если вы будете:
<?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);
}
}
Это подход, поэтому отрегулируйте его по мере необходимости для ваших конкретных требований.
Приветствия!