2013-06-24 1 views
0

Я пытаюсь создать пользовательские маршруты для моего сайта CodeIgniter. Даже самые основные маршруты не работают. Например, у меня есть контроллер приветствия, сопоставленный с «тестом», и это всего лишь 404 на мне. Я работаю на MAMP с включенным mod_rewrite.Проблема с маршрутами CodeIgniter, получение 404 ошибок

У меня есть index.php строку в config.php пустой ..

$config['index_page'] = ''; 

Вот мой файл .htacess ..

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

И вот мой путь ..

$route['welcome'] = 'test'; 
+0

Не должно быть '$ route ['welcome'] =" welcome/test "'? Является ли «тест» контроллером или методом внутри приемного контроллера? –

+0

приветствуется имя контроллера. это только тот, который поставляется с codeigniter. – Dustin

ответ

0

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

- CI Documentation

Ваше физическое имя контроллера welcome.Так что если вы хотите URL, содержащий слово test в первом сегменте будет переназначен на welcome класса, вы должны сделать это:

$route['test'] = "welcome/METHOD"; 

Где METHOD является метод welcome класса.

Примечание: Если класс/метод был welcome/index, вам не нужно добавлять /index.

0

Если я прочитал это правильно, этот маршрут попытается перенаправить «приветствие» контроллера на контрольный тест. Если контроллер с именем «тест» и функцию под названием «Индекс», вы можете маршрут следующее:

route['welcome/index'] = 'test/index'; 

Это то, что вы пытаетесь сделать?

+0

Фактически, оба индекса не требуются (и обычно не используются). См. Мой комментарий по вопросу –

0

Пара вещей:

  1. Маршруты в CI каскадно, они оцениваются сверху вниз, и маршрутизатор останавливается на первом матче. Убедитесь, то, чтобы иметь любой пользовательский маршрут размещен ниже на 2 маршрута по умолчанию в дистрибутиве ванильного:

    $route['default_controller'] = "welcome"; 
    $route['404_override'] = ''; 
    // custom routes here 
    $route['welcome'] = "welcome/test"; 
    
  2. Если контроллер под названием «Добро пожаловать» (по умолчанию один), и вы хотите вызвать метод под названием «тест», вам нужен маршрут как

    $route['welcome'] = "welcome/test" 
    

    , который будет доступен на URL http://wwww.yourdomain.com/welcome (если не были указаны ни одного маршрута, вы бы доступ к нему, как http://www.yourdomain.com/welcome/test)

Обычно контроллер имеет индексный метод, который вызывается автоматически, когда не предоставляется другой метод. Маршрут, который вы создали до сих пор, не работает, потому что он вызывает метод index() «контрольного» контроллера, которого, скорее всего, нет.

Предложение: если вы mainatain «Добро пожаловать» контроллер в качестве используемого по умолчанию, и вы хотите, чтобы вызвать URL как http://www.yourdomain.com/test Вам нужен метод test() и ваш маршрут должен быть

$route['test'] = "welcome/test";