Я установил 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.