CodeIgniter 404 Страница не найдена, но почему? - PullRequest
18 голосов
/ 20 сентября 2010

Я использую 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';

Добро пожаловать, мой контроллер по умолчанию.

Когда я вызываю домен / администратора, я получаю сообщение об ошибке 404 Страница не найдена. Когда я вызываю домен / 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 (с локальным доменом / admin /), но когда я публикую и протестирую ее на "живом" сервере, я просто получаю 404 ошибки.

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

Ответы [ 8 ]

15 голосов
/ 22 сентября 2010

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

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

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

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

6 голосов
/ 14 января 2017

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

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

Надеюсь, это кому-нибудь поможет

6 голосов
/ 14 декабря 2016

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

Мое приложение codeigniter работало нормально в localhost / WAMP, но не смогло выполнить маршрутизацию и выдало 404 не найденных ошибок при отправке в экземпляр AWS EC2,Моя проблема была решена из ответа ЗДЕСЬ htaccess работает в localhost, но не работает в экземпляре EC2

(маршрут к моей странице администратора) {домен} /Администратор выдавал 404

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

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

Перезапустить экземпляр EC2из панели инструментов AWS.

{домен} / admin теперь доступен и работает, как задумано.

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

4 голосов
/ 17 марта 2017
  1. Измените первую букву имени вашего контроллера на заглавные.
  2. Измените ваш URL так же, как имя вашего контроллера.

например:

Ваш контроллер называется YourController

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

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

Не быть:

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

2 голосов
/ 24 августа 2012

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

$this->class = strtolower(__CLASS__);
1 голос
/ 13 июля 2017

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

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

, и проблема решена...

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

1 голос
/ 20 сентября 2010

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

Здравствуйте, я использую 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 и системная папка на верхнем уровне?

0 голосов
/ 16 ноября 2015

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

...