如何在codeigniter 3中的n子文件夹中设置默认控制器

-Myproject
  -application
    -controllers
     -subfolder1
        -subfolder2
            -subfolder3
              -subfolder(..n)
                 Controller.php

And need to set routes.php

$route['default_controller'] = 'subfolder1/subfolder2/subfolder3/subfolder(..n)/controller';

According to the examples in the docs it does not appear that you can put a Controller more than one level deep inside a subdirectory.

example.com/index.php/subdirectory/controller/function

I also don't think your route looks correct. You would not have home/ at the start of the route unless "home" is a controller or subdirectory name. See examples here.

$route['default_controller'] = 'subdirectory/controller';

I have researched and found in codeigniter 3 system/core/Router.php library file's method _set_default_controller() can not support default controller in subfolder. So i have overrided/ customized this method _set_default_controller() and now it supports n level subfolders and working fine for me.

I have created application/core/MY_Router.php with the below code to override this method _set_default_controller()

<?php
/**
 * Override Set default controller
 *
 * @author : amit 
 *
 * @return  void
 */
protected function _set_default_controller()
{   
    if (empty($this->default_controller))
    {
        show_error('Unable to determine what should be displayed. A default route has not been specified in the routing file.');
    }

    // Is the method being specified?
    $x = explode('/', $this->default_controller);
    $dir = APPPATH.'controllers'; // set the controllers directrory path
    $dir_arr = array();
    foreach($x as $key => $val){            
        if(!is_dir($dir.'/'.$val)){
            // find out class i.e. controller
            if(file_exists($dir.'/'.ucfirst($val).'.php')){
                $class = $val; 
                if(array_key_exists(($key+1), $x)){
                    $method = $x[$key+1]; // find out method i.e. action
                }else{
                    $method = 'index'; // default method i.e. action
                }
            }else{
                // show error message if the specified controller not found
                show_error('Not found specified default controller : '. $this->default_controller); 
            }                
            break;               
        }
        $dir_arr[] = $val;
        $dir = $dir.'/'.$val;
    }
    //set directory
    $this->set_directory(implode('/', $dir_arr));

    $this->set_class($class);
    $this->set_method($method);

    // Assign routed segments, index starting from 1
    $this->uri->rsegments = array(
        1 => $class,
        2 => $method
    );

    log_message('debug', 'No URI present. Default controller set.');
}
?>

Now we can set default controller in application/config/routes.php like below

// without action method name

$route['default_controller'] = 'subfoler1/subfoler2/subfolder3/subfolder(..n)/controller';

OR

// with action method name

$route['default_controller'] = 'subfoler1/subfoler2/subfolder3/subfolder(..n)/controller/action'; 

If we will pass the action method name it will detect that method as action and if we will not pass action name then it will assume index as a action.