В Codeigniter некоторые URI проходят через index.php, некоторые не - PullRequest
1 голос
/ 04 мая 2011

В основном один контроллер (controller / themes.php, http://192.168.1.50/topics) проходит через index.php CI, как и предполагалось, еще один (controller / user.php, http://192.168.1.50/user) по какой-то странной причине)просто не проходит (я получаю ошибку 404 в браузере). CodeIgniter и / или Apache2 делают что-то забавное, и я не могу понять: «... / user» дает мне страницу Apache 404, но все же ».../User 'дает мне страницу 404 CI, что означает, что CI захватывает URI с именами контроллеров в верхнем регистре и игнорирует некоторые URI с именами контроллеров в нижнем регистре (а затем Apache пытается обработать URI).

Anyидеи почему и как решить?

PS - Да, я опубликовал свою проблему на форуме CI, но мне не повезло с их помощью. Я запускаю CodeIgniter 2.0.2 в дистрибутиве Linux (Ubuntu10.10 с лампой).

Ответы [ 4 ]

1 голос
/ 06 мая 2011

Проблема заключалась в том, что синтаксис условия переписывания говорит о том, что не следует направлять папки, которые НАЧИНАЮТСЯ с i, c, j или u, вместо папок с именами IS i, c, j или u. По совпадению имена моих контроллеров, которые не загружались, начинались с i (idea) и u (user).

Я мог бы просто переименовать мои статические папки в их полные имена («uploads» вместо «u») и обновить условие перезаписи и решить эту проблему, но я хотел бы оставить имена такими же. Кто-нибудь случайно знает правильный синтаксис для условия перезаписи, чтобы соответствовать точным именам (а не как или начинается с)?

0 голосов
/ 04 мая 2011

Я столкнулся с подобной проблемой вчера. Контроллер по умолчанию может иметь имя файла в верхнем регистре, но любой другой контроллер выдаст 404 в верхнем регистре. Это было на установке MAMP.

Убедитесь, что ваш контроллер также отражает имя файла.

class User extends CI_Controller {
0 голосов
/ 05 мая 2011

в вашем htaccess ... вместо

RewriteRule ^(.*)$ /index.php/$1 [L]

try

RewriteRule ^(.*)$ index.php/$1 [L]

и в вашем наборе конфигурации CI base_url как указано (включая трейлинг /!)

$config['base_url'] = 'http://www.site.com/';

Это должно сделать это.

0 голосов
/ 04 мая 2011

Проверьте имя вашего контроллера, чаще всего люди (я нахожу) делают это, копируя свой «главный» контроллер (например, themes.php) и переименовывая имя файла в whatever.php

Они начинают развиваться, а имя контроллера остается «Темы». 404 генерируется из-за того, что контроллер не найден (не фактический файл)

например: class Blog extends CI_Controller {...

, если приведенный выше код находится в файле stuff.php. Вы получите 404, если будете звонить /stuff

...