Возможно, ваши маршруты не разрешаются правильно, но я не уверен.Я бы порекомендовал следующие шаги:
Во-первых, я бы просто покончил с использованием 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
, который затем передается на внутренний редирект и разрешается, как и ожидалось.