Codeigniter 404 на действительных маршрутах при использовании пользовательских модемов htaccess mod rewrites

У меня возникла проблема с codeignighter при использовании пользовательского (несколько странного) отображения htaccess. Однако он должен технически работать, но это не так. Кто-нибудь может мне помочь?


Сценарий 1 (работает отлично):

Структура папки и файлы ключей

/ is the website root
/.htaccess
/api/ <this is the CodeIgniter Root, with index.php and default CI .htaccess>
.

/Htaccess:

RewriteEngine On
RewriteRule ^api/(.*)$ /api/$1 [L]

доступ к mydomain.com/api/admin/, например, приводит меня к моему действию admin-controller/index и отлично загружает представления.

var_dump на index.php для $_REQUEST показывает

array (size=1)
'admin/' => string '' (length=0)

Сценарий 2 (не работает):

Структура папки и файлы ключей

/.htaccess
/current/.htaccess
/current/api/ <this is the CodeIgniter Root, with index.php and default CI .htaccess, this is the same folder/files/htaccess as above scenario>
.

/Htaccess:

RewriteEngine On
RewriteRule ^(.*)$ /current/$1 [L]

/current/.htaccess:

RewriteEngine On
RewriteRule ^api/(.*)$ /api/$1 [L]

доступ к mydomain.com/api/admin/, например, приводит меня на страницу Codeigniter 404/view.

var_dump на index.php для показа $_REQUEST (То же, что и сценарий 1)

array (size=1)
'admin/' => string '' (length=0)

Что здесь происходит? Я знаю, что перезаписи htaccess странны, но, насколько видит Codeigniter, маршрут тот же (admin/). Но они оба ведут себя по-другому. Зачем? Я пробовал все, что мог придумать, насколько я вижу, codeigniter видит правильный путь до объекта запроса, но маршрутизатор CI каким-то образом не использует его правильно.

Любая помощь оценивается, дайте мне знать, можете ли вы придумать что-нибудь, что я могу попытаться помочь отладить это дальше.

Примечание: причина, по которой используется двойной htaccess, заключается в том, что я могу планировать разные экземпляры CI в зависимости от времени/сценария (вы можете использовать условие перезаписи для обслуживания разных папок вместо текущей папки). Im в настоящее время не использует это, поэтому в сценарии 2 корневой каталог имеет только одну "текущую" папку.

Ответ 1

Удаление index.php из URI в CodeIgniter может быть болью. На прошлой неделе я столкнулся с аналогичным случаем: у меня есть корневой веб-каталог в /var/www/html и внутри /ci моего проекта... поэтому внутри /ci у меня есть следующий .htaccess:

RewriteEngine on
RewriteCond $1 !^(index\.php)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

а в конфигурационном файле apache2 я добавил следующее:

<Directory /var/www/html/ci/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

Также проверьте, что в application/config/config.php у вас есть:

$config['uri_protocol'] = 'REQUEST_URI';

Надеюсь, что это поможет...

Ответ 2

Вы перенаправляете запросы в папку, в то время как на самом деле вы должны перенаправить их в файл index.php CodeIgniter.

например:

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

Предполагается, что у вас есть "index_page", установленный в пустую строку в вашем файле конфигурации. Если он установлен в index.php, тогда при запросе чего-то вы должны включать index.php в URL.