Intereting Posts
Как установить путь PHP include через .htaccess? Шаблон DataMapper PHP: моему классу нужен экземпляр PDO, я хочу обернуть его внутри класса Db Поиск PHP через вложенный массив для удаления элемента по имени Получение наивысшего числа из массива PHP myAdmin – Изменить порядок полей (перемещение вверх или вниз) Аутентификация электронной почты PHP Как избежать дублирования сообщений из базы данных в системе «бесконечной прокрутки»? Как проверить, имеет ли строка хотя бы одну букву, номер и специальный символ в php PDF Viewer для моего веб – PHP Выбор данных из БД на основе ввода пользователем Должен ли я создать новую таблицу в моей базе данных? Не удается отобразить французские акценты в php mail Все возможные комбинации в массиве – рекурсия? PHP 5.2 Примечание: использование неопределенной константы __DIR__ – предполагается '__DIR__ Раскройте файл gzip из CURL, на php

Codeigniter не работает правильно

Я установил 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 и изображения). "

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

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

Во-первых, я бы просто покончил с использованием 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 установлено.

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

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

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

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

 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.