#.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
или
Комментарии:
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
или
Комментарии:
1. Верхний или нижний регистр контроллера не должен иметь значения. По крайней мере, это не для меня, и, насколько я знаю, PHP не учитывает регистр имен классов или функций… Почему его контроллер по умолчанию работал, если проблема заключалась в нижнем регистре?
2. Я должен был сформулировать это лучше — это «лучшая практика», а не требование. Отредактировано, чтобы сделать его более понятным.
3. Я просто хотел дать понять OP (и любым другим людям, которые могут столкнуться с этим), что это была не его проблема, вот и все. Тем более, что изначально в ответах 2/4 предполагалось, что потенциальной проблемой был корпус имени контроллера.