Codeigniter не работает правильно - PullRequest
5 голосов
/ 04 августа 2010

Я установил Apache для Windows.Я купил CodeIgniter Professional и скачал их исходный код.Он сказал, что я должен положить его .htaccess в корневую папку веб-сайта, чтобы я сделал.Я установил базовый URL-адрес http://127.0.0.1/kids/, где дети - это корневая папка сайта.Это показало домашнюю страницу просто отлично.Когда я нажимаю на ссылку, она всегда выдает ошибку 404.Он сказал: «Запрошенный URL /index.php/welcome/cat/2 не был найден на этом сервере».Я попробовал несколько возможностей .htaccess в каталогах, но безуспешно.Внутри .htaccess он инструктирует:

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

Объясните, почему он вообще не работает?Я также проверил configs.php, и, кажется, все в порядке.config ['index_page'] установлен пустым.Я удалил файл .htaccess, но проблема все еще та же, за исключением того, что на нем было указано: «Запрошенный URL / kids / welcome / cat / 2 не найден на этом сервере».

Часы были потрачены впустую, пытаясь заставить это работать, и я теряю терпение.

Вот инструкция CodeIgniter Professional:

"Чтобы сделать эти папки доступными для CodeIgniter, вам также необходимо создать небольшой файл .htaccess в корневой папке вашего веб-сайта. Вот чтоэтот файл .htaccess будет выглядеть так: он в основном содержит инструкции, которые позволяют просматривать все файлы и папки на веб-сайте:

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

Если вы знакомы с mod_rewrite в Apache, вы заметите, что это правилоЯкобы удаляет index.php из URL любого места назначения. Ниже, когда вы настраиваете CodeIgniter (и особенно файл config.php), вы поймете, почему это хорошая идея. Если вы не знакомы с mod_rewrite в Apache, не пугайтесь этого файла. По сути, файл .htaccess устанавливает несколько правил, одно из которых удаляет index.php из всех URL-адресов. Другие правила в этом файле позволяют использовать различные другие папки, которые вам понадобятся.в будущем (например, папки, содержащие CSS, JavaScript, файлы Captcha иimages). "

Я сделал так, как было указано ... поместил файл htaccess в корневую папку, и все же он выдал ошибку 404.Если я удаляю файл htaccess из корневой папки, он показывает домашнюю страницу.Если я добавлю htaccess файл, он выдаст ошибку 404.Я переместил htaccess, и он ничего не сделал, чтобы изменить маршрут.Очевидно, что Apache понимал htaccess, иначе он не показал бы ошибку 404.

Ответы [ 2 ]

8 голосов
/ 04 августа 2010

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

Во-первых, я бы просто покончил с использованием PATH_INFO для вашей маршрутизации CodeIgniter, так как в этом нет необходимости.Измените файл .htaccess на этот:

RewriteEngine On

RewriteCond $0 !^(index\.php|images|captcha|css|js|robots\.txt)
RewriteRule ^.*$ index.php [L]

Затем в вашей конфигурации убедитесь, что для $config['uri_protocol'] установлено значение AUTO (по-моему, по умолчанию) или REQUEST_URI.

После этого наиболее вероятной причиной является то, что ваши маршруты ожидают, что в URL-адресе будет косая черта.Я не знаю достаточно о CodeIgniter, чтобы знать, где сконфигурирован этот конкретный параметр, но вы можете сделать так, чтобы ваши URL имели косую черту со следующей директивой конфигурации:

$config['url_suffix'] = "/";

Редактировать : Убедитесь, что mod_rewrite также работает.Попробуйте это в верхней части файла .htaccess после директивы RewriteEngine:

RewriteRule .* http://stackoverflow.com/ [L,R]

Если вы будете перенаправлены в Stack Overflow, по крайней мере, мы будем знать, что это работает.Если нет, вы не получите ошибку 500, поэтому проблема будет в файле .htaccess, и в этом случае вы должны подтвердить, что соответствующая запись <Directory> в конфигурации вашего сервера для того, где ваш сайт расположен на дискеимеет AllowOverride All установлен.

Edit : я должен был знать лучше о слеш, прошу прощения за это.Проблема возникает из-за того, как mod_rewrite работает в контексте вашего каталога (.htaccess).

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

Когда он оставлен как есть, внутреннее перенаправление на /index.php, в данном случае, считается полным URL-адресом от хоста.(локальный).Таким образом, запрашиваемый ресурс в итоге равен http://localhost/index.php.Когда добавляется префикс для каждого каталога, более поздний шаг в механизме перезаписи пытается удалить DocumentRoot из пути, если он присутствует.Это оставляет нас с /kids/index.php, который затем передается на внутренний редирект и разрешается, как и ожидалось.

0 голосов
/ 04 августа 2010

Попробуйте это:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^(.*)$ /index.php/$1 [NC,L]

Поместите это в папку детей, где index.php.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...