2015-08-11 10 views
10

Im avendo un problema con codeignighter quando si utilizza la mappatura della cartella htaccess personalizzata (un po 'strana). Tuttavia, dovrebbe funzionare tecnicamente, ma non è così. Qualcuno può aiutarmi?Codeigniter 404 su route valide quando si utilizzano riscritture mod personalizzate htaccess


Scenario 1 (funziona bene):

struttura di cartelle e file di chiave

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

accesso mydomain.com/api/ admin/per esempio mi porta alla mia azione admin-controller/index e carica th e vede bene.

var_dump su index.php per $ _REQUEST spettacoli

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

Scenario 2 (Non funziona):

struttura di cartelle e file di chiave

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

accesso mydomain.com/api/admin/ per esempio mi viene alla Codeigniter 404 Pagina/vista.

var_dump su index.php per $ _REQUEST spettacoli (lo stesso scenario 1)

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

cosa sta succedendo qui? So che le riscritture in htaccess sono strane, ma per quanto riguarda ciò che Codeigniter vede, il percorso è lo stesso (admin /). Ma entrambi si comportano diversamente. Perché? Ho provato tutto quello che potevo pensare, per quanto posso vedere, il code-code vede il percorso giusto fino all'oggetto Request, ma il router CI in qualche modo non lo usa correttamente.

Qualsiasi aiuto apprezzato, fammi sapere se riesci a pensare a qualcosa che posso provare ad aiutare a debugare ulteriormente.

Nota: il motivo dell'impiego di double htaccess è che è possibile pianificare diverse istanze di CI in base al tempo/scenario (è possibile utilizzare la condizione di riscrittura per servire cartelle diverse anziché la cartella "corrente"). Attualmente non sto usando questo, quindi nello scenario 2, la radice ha solo la cartella "corrente".

+0

prova questo 'RewriteRule^api /(.*)$ /api/index.php/$1 [L]' –

+0

Che dire di qualsiasi file di asset all'interno della cartella api? come è comune a codeigniter, che dire di api/assets/mylogo.jpg? Qualsiasi richiesta per quello andrebbe poi nei file php codeigniter e verrebbe come un 404. Ho sbagliato? – decay

+0

Giusto per chiarire, la cartella api contiene anche un file htaccess, il solito file htaccess di CI: http://pastebin.com/aHM9cjtr come menzionato nella domanda – decay

risposta

0

Stai reindirizzando le richieste a una cartella, mentre in effetti dovresti reindirizzarle al file index.php di CodeIgniter.

e.g:

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

che sta assumendo di avere 'index_page' impostato su una stringa vuota nel file di configurazione, se è impostato a index.php, poi quando si richiede qualcosa che dovrebbe essere compresi index.php nel URL.

+0

E i file delle risorse all'interno della cartella API? come è comune a codeigniter, che dire di api/assets/mylogo.jpg? Qualsiasi richiesta per quello andrebbe poi nei file php codeigniter e verrebbe come un 404. Ho sbagliato? – decay

+0

Giusto per chiarire, la cartella api contiene anche un file htaccess, il solito file htaccess di CI: http://pastebin.com/aHM9cjtr come menzionato nella domanda – decay

+0

L'hai già definito,! -f &! -d che significa , se qualcosa che non è un file o non è una directory richiesta, passerà attraverso il file index.php di codeigniter. il che significa che dovresti essere in grado di richiedere le tue risorse nel modo normale. – ahmad

1

Rimuovere index.php dall'URI su CodeIgniter può essere un problema. La settimana scorsa mi trovavo di fronte ad un caso simile: ho la mia web directory root al /var/www/html e dentro /ci il mio progetto ... così dentro /ci Ho la seguente .htaccess:

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

e nel file di configurazione apache2 I aggiunto il seguente:

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

verificare inoltre che nel application/config/config.php si hanno:

Spero che sia di aiuto ...

Problemi correlati