2015-08-11 34 views
10

Mam problem z codeignighter przy użyciu niestandardowego (nieco dziwne) mapowania folderów htaccess. Powinien jednak technicznie działać, ale tak nie jest. Czy ktoś może mi pomóc?Codeigniter 404 na prawidłowych trasach podczas korzystania z niestandardowego przepisu htaccess modyfikuje


Scenariusz 1 (działa poprawnie):

Struktura folderów i kluczowe pliki

/ 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] 

dostępu mydomain.com/api/ admin/na przykład przenosi mnie do mojej akcji administratora/indeksu i ładuje ją e widoki dobrze.

var_dump na index.php do $ _REQUEST pokazy

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

Scenariusz 2 (Nie działa):

struktura folderów i plików kluczowe

/.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] 

dostępu mydomain.com/api/admin/ np dostaje mnie do CodeIgniter 404 strony/widoku.

var_dump na index.php za $ _REQUEST pokazach (tak samo jak scenariuszu 1)

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

Co tu się dzieje? Wiem, że przeróbki htaccess są dziwne, ale o ile widzi Codeigniter, trasa jest taka sama (admin /). Ale oboje zachowują się inaczej. Czemu? Próbowałem wszystkiego, co mogłem wymyślić, o ile widzę, codeigniter widzi właściwą ścieżkę, jeśli chodzi o obiekt żądania, ale router CI w jakiś sposób nie używa go poprawnie.

Każda pomoc doceniona, daj mi znać, jeśli możesz wymyślić coś, co mogę spróbować pomóc w debugowaniu tego dalej.

Uwaga: powodem, dla którego używam podwójnego htaccess, jest możliwość planowania różnych instancji CI w zależności od czasu/scenariusza (możesz użyć warunku przepisywania, aby wyświetlać różne foldery zamiast "bieżącego"). Obecnie nie używam tego, więc w scenariuszu 2 root ma tylko jeden "aktualny" folder.

+0

wypróbuj to 'RewriteRule^api /(.*)$ /api/index.php/$1 [L]' –

+0

Co z plikami zasobów w folderze api? jak to często bywa z codeigniter, a co z api/assets/mylogo.jpg? Wszelkie prośby o to następnie trafiłyby do plików php codeigniter i pojawiłyby się jako 404. Czy się mylę? – decay

+0

Aby wyjaśnić, folder api zawiera również plik htaccess, zwykle plik htaccess CI: http://pastebin.com/aHM9cjtr, jak wspomniano w pytaniu – decay

Odpowiedz

0

Przekierowujesz żądania do folderu, podczas gdy w rzeczywistości powinieneś przekierowywać je do pliku index.php programu CodeIgniter.

e.g:

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

Oznacza to zakładając, że masz „index_page” ustawiony na pusty ciąg znaków w pliku konfiguracyjnym Jeśli jest ustawione na index.php, a następnie w przypadku prośby o coś powinno być w tym index.php w adresie URL.

+0

Co z plikami zasobów w folderze api? jak to często bywa z codeigniter, a co z api/assets/mylogo.jpg? Wszelkie prośby o to następnie trafiłyby do plików php codeigniter i pojawiłyby się jako 404. Czy się mylę? – decay

+0

Aby wyjaśnić, folder api zawiera również plik htaccess, zwykle plik htaccess CI: http://pastebin.com/aHM9cjtr, jak wspomniano w pytaniu – decay

+0

Już zdefiniowałeś to! -f &! -d co oznacza , jeśli coś, co nie jest plikiem lub nie jest żądanym katalogiem, przejdzie przez plik index.php z codeigniter. co oznacza, że ​​powinieneś być w stanie zażądać swoich aktywów w normalny sposób. – ahmad

1

Usunięcie index.php z URI w CodeIgniter może być uciążliwe. W ubiegłym tygodniu miałem do czynienia z podobnym przypadku: Mam główny katalog stron w /var/www/html i wewnątrz /ci mojego projektu ... więc wewnątrz /ci Mam następujący .htaccess:

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

aw apache2 pliku config I dodawali następujący:

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

sprawdzić również, że w application/config/config.php masz:

Nadzieję, że pomaga ...