2010-09-20 4 views
17

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

/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 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/админ /), но когда я публикую и проверить его на «живой» сервер, я просто получаю 404 ошибки.

Любые идеи? Что я делаю не так? Спасибо C.

+0

Просто мысль, возможно, живой сервер не работает mod_rewrite? Живой сервер дает вам только 404 или случайные? – Fanis

+0

Кажется, что я работаю - я просто протестировал его с уловом всех не-www-доменов и перенаправил на google.com. Ошибки 404, безусловно, генерируются CI (потому что они используют CSS). – Joseph

+0

Просто хотел опубликовать это, если вы используете NEW INSTALLATION of Codeigniter 3, и у вас есть место в имени папки хостинга, оно будет служить 404. Версия 3.0.0 –

ответ

15

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

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

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

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

+0

Маршрутизация начала работать, но теперь CLI возвращает «Добро пожаловать в CodeIgniter». в любом случае вокруг него? Я разместил дополнительную информацию [здесь] (http://stackoverflow.com/questions/25545696/codeigniter-htaccess-rewriterule-result-in-404-page-not-found#comment39888065_25545696) – Kuf

1

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

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

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

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

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

+0

Вот как я структурирую свои приложения. У меня есть приложение для администратора и веб-приложение. Они совместно используют системную папку («../system»), и каждая из них имеет отдельную папку приложения («../application/admin») («../application/website»). – Matthew

+0

Основано на этом: http://codeigniter.com/user_guide/general/managing_apps.html Существует только одна системная папка. Я переместил папку приложения на тот же уровень, что и системная папка. – Joseph

+0

Я имел в виду, что в файле /admin/index.php я изменил строки 26, 43 и 101 – Joseph

1

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

$this->class = strtolower(__CLASS__); 
0

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

-2

Проверьте Ваш каталог Найти любое пространство Codignater Many Times Дайте ошибку, когда вы место в вашей директории Codignater Удалить все пространство из каталога Пример

ITWORLD compk 

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

ITWORLD_COM_PK 
4

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

Мое приложение codeigniter отлично работает в localhost/WAMP, но не удалось выполнить маршрутизацию и произвести 404 не найденных ошибок при нажатии на экземпляр AWS EC2. Моя проблема была решена с ответом от HEREhtaccess works in localhost but doesn't work in EC2 instance

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

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

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

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

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

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

+0

Спасибо, это сработало для меня –

3

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

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

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

+0

Контроллер действительно нуждается в капитализации, но доступ к нему через URL-адрес необязательно требует, чтобы вы поместили заглавную букву в URL-адрес. – PhoenixNoor

0

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

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

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

Благодарности @fanis, который указал, что в своем комментарии по этому вопросу.

Смежные вопросы