Codeigniter: Регулярные контроллеры в порядке. Контроллеры HMVC не работают (страница не найдена)

Так что это досадная проблема, когда что-то отлично работает в вашем локальном проекте, но все разваливается после развертывания в производстве.

В этом случае, я могу получить доступ ко всем страницам, сгенерированным обычным контроллером codeigniter (находится в приложении / контроллерах). Однако, как только я пытаюсь получить доступ к модулю HMVC, я просто получаю ошибку codeigniter 404.

Ситуация все еще в порядке для обычных контроллеров:

Так, например, если у меня есть обычный контроллер C1, расположенный в application / controllers / C1.php, который содержит функцию page (), я могу получить доступ к www.mysite.com/C1/page без проблем.

Проблема доступа к контроллерам HMVC:

Однако, если я хочу получить доступ к контроллеру C2, расположенному в application / modules / C2 / controllers / C2.php, через URL-адрес www.mysite.com/C2/page, я получу ошибку 404.

И проблема с доступом к обычному контроллеру через ajax:

Вторая проблема возникает при выполнении вызова ajax, используя путь, который ссылается на обычный контроллер CI. Путь, используемый в вызове ajax, похоже, не распознан, и я получаю ошибку 500. Тем не менее, при вызове того же пути непосредственно в строке URL, правильная функция, кажется, выполняется. Я решил подобную проблему раньше, применяя решение, найденное в Codeigniter base_url () не работает должным образом для AJAX. Тем не менее, я еще не определил, если это та же проблема.

Это похоже на проблему с загрузчиком, но я не эксперт!

Даже если это проблема загрузчика, почему он работает на локальном, а не на производстве?

Вы когда-нибудь сталкивались с чем-то подобным? У вас есть идея, как решить эту проблему?

** Редактировать 3: ** Я удалил 2 предыдущих редактирования, потому что теперь они не имеют значения.

После активации режима отладки и добавления некоторых журналов я наконец нашел то, что я думаю, чтобы быть ответом.

Короче говоря, моя локальная версия codeigniter работает на Windows, и по какой-то причине при попытке связаться с контроллером случай игнорируется. Так File.php и еile.php считаются одинаковыми.

Мой рабочий сервер работает под управлением Linux, поэтому он не учитывает, что два разных имени файла относятся к одному и тому же файлу. Поэтому я прошу еile.php, и сервер отвечает «такого файла нет», потому что файл, который я на самом деле хочу, File.php.

Мне нужно сдать. Я предложу правильный ответ завтра, после еще нескольких проверок.

Спасибо,

Лоик.

0

Решение

Таким образом, проблема не была связана с обычными контроллерами по сравнению с контроллерами HMVC. В основном происходит то, что моя локальная среда разработки — Windows, и по какой-то причине Windows решает, что при именовании файла случай не имеет значения.

Так еile.php будет выглядеть так же, как File.php (обратите внимание, что первая строчная, а вторая прописная).

В своем коде я пытался получить еile.php (в нижнем регистре), а сам файл был назван File.php и все заработало на windows.

Однако в цивилизованных операционных системах File.php и еile.php считаются двумя разными именами, и поэтому вдруг вещи, которые не работают в производстве, даже если код был одинаковым. Файлы контроллера просто не могут быть найдены.

Я изменил имена файлов моего контроллера (поместил их в нижний регистр), и теперь все работает нормально.

Спасибо всем за ваши предложения.

Лоик.

2

Другие решения

С HMVC маршруты должны быть похожи

$route['something'] = "module/controller/function";

$route['something/(:any)'] = "module/controller/function/$1";

Также убедитесь, что при использовании контроллеров intead из welcome.php убедитесь, что имя контроллера, например, Welcome.php

При использовании маршрутов, если не удалить index.php из контроллера, тогда URL будет

С Http: //localhost/project/index.php/something

Без HTTP: // локальный / проект / что-то

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector