CodeIgniter 404 Страница не найдена, но почему?

Я использую CodeIgniter для двух приложений (общедоступное и административное приложение). Важными элементами структуры документа являются:

/admin /admin/.htaccess /admin/index.html /application /application/admin /application/public /system .htaccess index.php 

Файл /admin/.htaccess выглядит следующим образом:

 DirectoryIndex index.php RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ ./index.php/$1 [L,QSA] 

Параметр /admin/index.php имеет следующие изменения:

 $system_folder = "../system"; $application_folder = "../application/admin"; (this line exists of course twice) 

И /application/admin/config/routes.php содержит следующее:

 $route['default_controller'] = "welcome"; $route['admin'] = 'welcome'; 

Приветствие – это мой контроллер по умолчанию.

Когда я вызываю домен / admin, я получаю ошибку 404 Page Not Found. Когда я вызываю домен / admin / welcome, все работает нормально. В журналах отладки появляется следующее сообщение об ошибке:

 DEBUG - 2010-09-20 16:27:34 --> Config Class Initialized DEBUG - 2010-09-20 16:27:34 --> Hooks Class Initialized DEBUG - 2010-09-20 16:27:34 --> URI Class Initialized ERROR - 2010-09-20 16:27:34 --> 404 Page Not Found --> admin 

Как ни странно, эта настройка отлично работает на моей локальной установке MAMP (с localdomain / admin /), но когда я публикую и тестирую ее на «живом» сервере, я просто получаю 404 ошибки.

Есть идеи? Что я делаю не так? Спасибо С.

Причиной проблемы было то, что на сервере был запущен PHP с использованием FastCGI.

После изменения config.php на

 $config['uri_protocol'] = "REQUEST_URI"; 

все сработало.

Оставив этот ответ здесь для других, которые столкнулись с моей ситуацией.

Мое приложение codeigniter отлично работало в localhost / WAMP, но не смогло маршрутизировать и не выпустить 404 не найденных ошибок при нажатии на экземпляр AWS EC2. Моя проблема была решена из ответа от HERE htaccess работает в localhost, но не работает в экземпляре EC2

(маршрут к моей странице администратора) {domain} / admin производил 404

необходимо изменить файл /etc/httpd/conf/httpd.conf .

– после каждого экземпляра «DocumentRoot» / var / www / html «» (2 места) «AllowOverride None» необходимо изменить на «AllowOverride All».

Перезагрузили экземпляр EC2 на приборной панели AWS.

{domain} / admin теперь доступен и работает по назначению.

надеюсь, это поможет кому-то еще, как это помогло мне!

Вы можете попробовать одну из двух вещей или комбинацию того и другого.

  1. Убедитесь, что имя вашего контроллера начинается с заглавной буквы. например, "Mycontroller.php"
  2. Если вы не внесли никаких изменений в свой маршрут, по какой-то странной причине вам, возможно, придется указать заглавные буквы в вашем URL-адресе. например, если ваш контроллер «Mycontroller.php» с функцией с именем «testfunc» внутри него, ваш url будет выглядеть так: « http: //www.yourdomain/index.php/Mycontroller/testfunc ». Обратите внимание на заглавную букву. (Я предполагаю, что вы не добавили файл htaccess, чтобы удалить часть index.php. Если у вас есть, просто удалите его из URL-адреса.)

Я надеюсь, что это помогает кому-то

Структура папки / файла кажется мне немного странной. Я не могу понять, как вы это сделали.

Привет, я использую CodeIgniter для двух приложений (общедоступное и административное приложение).

Это звучит так, как будто у вас есть две отдельные установки CI. Если это так, я бы рекомендовал против этого. Почему бы просто не обрабатывать все админы в контроллере администратора? Если вам нужны две отдельные установки CI, убедитесь, что они определенно разные объекты и что они не конфликтуют друг с другом. Эта строка:

 $system_folder = "../system"; $application_folder = "../application/admin"; (this line exists of course twice) 

И место, где вы сказали, что это существует (/admin/index.php … или вы имели в виду / admin / application / config?), Я почесал голову. У вас есть admin / application / admin и системная папка на верхнем уровне?

мы должны дать имя контроллера в нижнем регистре на стороне сервера

 $this->class = strtolower(__CLASS__); 

В моем случае я использовал его на localhost и забыл изменить RewriteBase в .htaccess .

  1. Измените имя контроллера на первую букву на верхний регистр.
  2. Измените свой URL-адрес так же, как имя вашего контроллера.

например:

Имя вашего контроллера – YourController

Ваш URL должен быть:

http://example.com/index.php/YourController/method

Не быть:

http://example.com/index.php/yourcontroller/method

У меня была такая же проблема после перехода на новую среду, и просто было, что сервер не запускал mod_rewrite

быстрый sudo a2enmod rewrite затем sudo systemctl restart apache2

и проблема решена …

Спасибо @fanis, который указал на это в своем комментарии к вопросу.

Проверьте, что ваш каталог находит любое пространство Codignater. Многие времена дают ошибку, когда вы занимаете место в своем каталоге Codignater. Удалите все пространство из примера каталога.

 ITWORLD compk 

измените его на

 ITWORLD_COM_PK