Страница 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';
Добро пожаловать - мой контроллер по умолчанию.
Когда я вызываю Домен/администратора, я получаю сообщение об ошибке 404 Страница Не найдена. Когда я звоню до домена/администратора/приветствия все работает нормально. В журналах отладки я получаю следующее сообщение об ошибке:
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 ошибки.
Есть идеи? Что я делаю не так? Спасибо С.
9 answers
Причиной проблемы было то, что сервер запускал PHP с использованием FastCGI.
После изменения config.php к
$config['uri_protocol'] = "REQUEST_URI";
Все сработало.
Оставляя этот ответ здесь для других, кто столкнулся с моей ситуацией.
Мое приложение codeigniter отлично работало в localhost/WAMP, но не смогло выполнить маршрутизацию и выдало 404 не найденных ошибки при переходе к экземпляру AWS EC2. Моя проблема была решена из ответа ЗДЕСЬ htaccess работает в localhost, но не работает в экземпляре EC2
(маршрут к моей странице администратора) {домен}/администратор производил 404
Файл /etc/httpd/conf/httpd.conf
необходимо изменить.
- после каждый экземпляр "DocumentRoot"/var/www/html"" (2 места) "AllowOverride Нет" необходимо изменить на "AllowOverride Все".
Перезапустил экземпляр EC2 с панели мониторинга AWS.
{домен}/администратор теперь доступен и работает по назначению.
Надеюсь, это поможет кому-то еще, как помогло мне!
Вы можете попробовать одну из двух вещей или комбинацию того и другого.
- Убедитесь, что имя вашего контроллера начинается с заглавной буквы. например"Mycontroller.php "
- Если вы по какой-то странной причине не внесли никаких изменений в свой маршрут, вам, возможно, придется включить заглавные буквы в свой 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?) заставляет меня чесать в затылке. У вас есть администратор/приложение/администратор и системная папка на верхнем уровне?
Мы должны указать имя контроллера в нижнем регистре на стороне сервера
$this->class = strtolower(__CLASS__);
У меня была такая же проблема после перехода в новую среду, и просто сервер не запускал mod_rewrite
Быстрый sudo a2enmod rewrite
затем sudo systemctl restart apache2
И проблема решена...
Спасибо @fanis, который указал на это в своем комментарии к вопросу.
В моем случае я использовал его на localhost
и забыл изменить RewriteBase
в .htaccess
.
- Измените имя контроллера на первую букву в верхнем регистре.
- Измените свой URL-адрес так же, как и имя контроллера.
Например:
Имя вашего контроллера - ваш контроллер
Ваш URL-адрес должен быть:
Http://example.com/index.php/YourController/method
Не быть:
Проверьте Свой Каталог, Найдите Любое Свободное Место Codignater Много Раз Выдает Ошибку, Когда Вы Размещаете В Своем Каталоге Codignater Удалить Все Пространство Из Каталога Пример
ITWORLD compk
Измените его На
ITWORLD_COM_PK