Вопрос о настройке CodeIgniter

#.htaccess #codeigniter

#.htaccess #codeigniter

Вопрос:

Я пытаюсь заставить этот URL работать при установке codeigniter, только что установил новейшую версию сегодня (2.0.2):

http://mydomain.com/pete/ci_test/accounts

Итак, я установил свой контроллер по умолчанию в routes.php для test.php и внутри моего контроллера, test.php У меня есть этот код:

 class test extends CI_Controller {

public function index() {
    $this->load->view('test');
}

public function accounts() {
    $this->load->view('accounts');
}
}
  

и тогда у меня есть test.php и accounts.php в моих представлениях он загружает test.php просмотреть, когда я перейду к http://mydomain.com/pete/ci_test /

Но когда я перехожу к http://mydomain.com/pete/ci_test/accounts это дает мне 404. Я читал Начало работы, и там говорится «По умолчанию CodeIgniter использует подход, основанный на сегментах», а затем приводится пример, аналогичный тому, что я делаю. Но затем я прочитал немного дальше, в нем говорится: «По умолчанию index.php файл будет включен в ваш URL» . Итак, я добавил это в свой файл htaccess (расположенный по mydomain.com/pete/ci_test/.htaccess ):

 RewriteEngine on
RewriteCond $1 !^(index.php|images|robots.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
  

Я убедился, что модуль загружается внутри httpd.conf. Он по-прежнему не переходит на мой accounts.php посмотреть. Я также пытался:

http://mydomain.com/pete/ci_test/index.php/accounts

Но еще 404, что я делаю не так? Любой совет поможет, спасибо!

Ответ №1:

Я столкнулся с той же проблемой, поэтому я осмотрелся. Вы должны использовать это содержимое .htaccess. У меня это сработало.

 Options  FollowSymLinks
Options -Indexes
DirectoryIndex index.php
RewriteEngine on
RewriteCond $1 !^(index.php|resources|images|css|js|robots.txt|favicon.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L,QSA]
  

Ответ №2:

Имя класса в вашем контроллере должно быть заглавным:

 class Test extends CI_Controller {
  

И что касается доступа к нему, URL-адрес должен быть:

Редактировать Теперь, когда я заметил, исправлена вложенная папка

http://mydomain.com/pete/ci_test/test/accounts

или

http://mydomain.com/pete/ci_test/index.php/test/accounts

Комментарии:

1. @Pete Они должны, если ваша установка codeigniter не включена /pete/ . Также CI_Controller выглядит как более старая версия. Какую версию вы используете? Вместо этого расширяется последняя версия Controller .

2. Он сказал, что он был на 2.0.2, который действительно использует CI_Controller вместо старого Controller . Его каталог установки pete/ci_test , и верхний / нижний регистр не должен иметь никакого значения — это скорее руководство по стилю.

3. @Wesley хорошо, посмотри сейчас. Я также сказал «следует» скорее как рекомендацию, чем «нужно», как в «сделай это, или я брошу в тебя много маленьких подушек». Хорошо, я думал, что его папка была /pete/ и не /pete/ci_test . Обновлено.

Ответ №3:

Контроллер по умолчанию загружается, когда отсутствуют сегменты URL-адреса — вот и все.

Если вы хотите /accounts загрузить test контроллер и accounts метод, вам придется использовать маршрут, подобный этому:

 $route['accounts'] = 'test/accounts';
  

В противном случае вам придется иметь контроллер учетных записей или обращаться к нему через /test/accounts/

Комментарии:

1. Думаю, теперь я понимаю, я настроил 2-й контроллер, который загружает представление учетных записей. mydomain/pete /ci_test/index.php/accounts теперь загружает представление учетной записи, я хотел бы избавиться от index.php но пока я могу с этим поработать, спасибо!

2. К вашему сведению, Пит, заглавные или все строчные имена классов не нарушат ваш код, но, как уже упоминалось, лучше придерживаться предложенного соглашения об именовании.

Ответ №4:

onteria_ правильно, что ваш контроллер должен быть заглавным. Это не требование, а скорее «наилучшая практика».

Тем не менее, я думаю, что именование вашего контроллера по сравнению название вложенной папки сбивает людей с толку. Похоже, что ваша установка находится в папке с именем ci_test . В этом случае для доступа к нему URL-адрес должен быть либо

http://mydomain.com/pete/ci_test/test/accounts

или

http://mydomain.com/pete/ci_test/index.php/test/accounts

Комментарии:

1. Верхний или нижний регистр контроллера не должен иметь значения. По крайней мере, это не для меня, и, насколько я знаю, PHP не учитывает регистр имен классов или функций… Почему его контроллер по умолчанию работал, если проблема заключалась в нижнем регистре?

2. Я должен был сформулировать это лучше — это «лучшая практика», а не требование. Отредактировано, чтобы сделать его более понятным.

3. Я просто хотел дать понять OP (и любым другим людям, которые могут столкнуться с этим), что это была не его проблема, вот и все. Тем более, что изначально в ответах 2/4 предполагалось, что потенциальной проблемой был корпус имени контроллера.