Контроллер по умолчанию CodeIgniter в подкаталоге не работает

Мой default_controller в конфигурации маршрутов задан как «home.php».

У меня есть вспомогательный каталог для моих контроллеров, который можно назвать «папкой». Итак, если я нахожусь на http://mysite.com/folder/ , то по умолчанию контроллер «folder / home.php» должен быть вызван правильно?

Однако по какой-то причине это не работает, я получаю 404. Посещение http://mysite.com/folder/home или http://mysite.com/folder/home/index работает так, как ожидалось. В дополнение к этому контроллер по умолчанию работает в корневом каталоге ( http://mysite.com загружает home.php).

Любые идеи, кто-нибудь еще испытал это? Я не могу обдумать это – это будет проблема CI, но я не могу найти кого-то другого с той же проблемой.

Документация, как я понимаю, по крайней мере, предполагает, что это должно работать нормально: http://codeigniter.com/user_guide/general/controllers.html#subfolders

Установка контроллера по умолчанию на «folder / home.php» означает, что http://mysite.com/folder/ работает нормально, как ожидалось. За исключением того, что я хочу, чтобы контроллер по умолчанию просто был «home.php» – как в корне, так и в подкаталоге, home.php внутри этого каталога должен быть загружен, как предполагает документация.

ура

Solutions Collecting From Web of "Контроллер по умолчанию CodeIgniter в подкаталоге не работает"

Для каждой routes.php в папке контроллеров вы должны указать контроллер по умолчанию в routes.php . Встроенный $route['default_controller'] не будет работать для подпапок.

например: Для установки контроллера по умолчанию для вашей folder папке для home добавьте следующее в файл /application/config/routes.php :

 $route['folder'] = "folder/home"; 

что означает http://mysite.com/folder/ – это то же, что и http://mysite.com/folder/home как URL.

Вы можете расширить системный маршрутизатор в соответствии с требованиями,

  1. Создать My_Router.php в каталоге application/core/

/ * * Чтобы изменить этот заголовок лицензии, выберите «Заголовки лицензий» в «Свойства проекта». * Чтобы изменить этот файл шаблона, выберите «Инструменты | Шаблоны * и откройте шаблон в редакторе. * /

 /** * Description of My_Router * * @author girish */ class My_Router extends CI_Router { //put your code here public function __construct($routing = NULL) { parent::__construct($routing); } 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? if (sscanf($this->default_controller, '%[^/]/%[^/]/%s', $directory, $class, $method) !== 3) { $method = 'index'; } if (is_dir(APPPATH . 'controllers' . DIRECTORY_SEPARATOR . $directory) === true) { if (!file_exists(APPPATH . 'controllers' . DIRECTORY_SEPARATOR . $directory . DIRECTORY_SEPARATOR . ucfirst($class) . '.php')) { // This will trigger 404 later return; } $this->set_directory($directory); $this->set_class($class); $this->set_method($method); } else { if (sscanf($this->default_controller, '%[^/]/%s', $class, $method) !== 2) { $method = 'index'; } if (!file_exists(APPPATH . 'controllers' . DIRECTORY_SEPARATOR . ucfirst($class) . '.php')) { // This will trigger 404 later return; } $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.'); } } 

и перезаписать _set_default_controller() из пользовательского метода, он будет работать и с контроллером _set_default_controller() а также с контроллером корневого каталога.

А в application/config/routes.php

если вам нужен контроллер по умолчанию для подкаталога, тогда

  $route['default_controller'] = "admin/admins/login"; 
  • admin – папка
  • администраторы – контроллер
  • логин – метод

если вам нужен корневой каталог по умолчанию, то

  $route['default_controller'] = "welcome/index"; 
  • welcome – контроллер
  • индекс – метод

не уверен, что он будет работать во всех версиях, но протестирован в CI3.0.6

Если вы хотите оставаться гибким, вам нужно передать все после начальной папки (в application/config/config.php ):

 $route['home'] = "home/whatever"; $route['home/(:any)'] = "home/whatever/$1"; 

Маршрут по умолчанию используется для указания CI, какой класс контроллера должен быть загружен, если URI не содержит данных.

введите описание изображения здесь

 $route['default_controller'] = "unicorn/best"; 

Итак, когда я загружаю

 http://example.com/index.php/unicorn/ 

будет загружен лучший контроллер.

также когда я загружаю

 http://example.com/ 

или

 http://example.com/index.php/horse/ 

будет загружен лучший контроллер.

МОЯ СТРУКТУРА ПАДЕНИЯ

 --controllers --backend --frontend --home.php --products.php --productDetail.php --homeIndex.php 

В config / routes.php

 $route['default_controller'] = 'homeIndex'; $route['frontend'] = 'frontend/home'; $route['backend'] = 'backend/home'; 

В контроллерах / homeIndex.php

 <?php defined('BASEPATH') OR exit('No direct script access allowed'); require_once(APPPATH.'controllers/frontend/Home.php'); class homeIndex extends home { public function index() { $this->action(); } } 

по умолчанию homeIndex будет загружен и из homeIndex я вызову функцию frontend / home / action.