2011-11-24 4 views
5

Ho installato un server Apache2 (più PHP & MySQL) e abilitato lo mod_rewrite nella configurazione di apache. Ho aggiunto il file .htaccess per rimuovere index.php dall'URL come descritto nel wiki CodeIgniter.Rewriterule per CodeIgniter non funzionante

RewriteEngine on 
RewriteCond $1 !^(index\.php|images|robots\.txt) 
RewriteRule ^(.*)$ /index.php/$1 [L] 

Ho inserito questo file nella radice del sito.

Quando si tenta di accedere all'URL mydomain.local/index.php/welcome, viene visualizzata la pagina predefinita di CodeIgniter. Ma quando provo ad accedere alla stessa pagina tramite mydomain.local/welcome, ottengo la pagina 404.

Come posso verificare se l'intera regola di riscrittura funziona? E perché non funziona?

risposta

9

Ho trovato la soluzione. Non è stato possibile eseguire il file htaccess dalla configurazione di Apache. Quindi ho dovuto impostare il flag AllowOverride nella directory su AllowOverride ALL.

Grazie per tutto l'aiuto!

+3

grazie ... ho risolto esattamente il mio problema – hforbess

0

è necessario rimuovere l'index.php dalla pagina di indice nel file di configurazione

/application/config/config.php

$config['index_page'] = ''; 

provare questa roba .htaccess, è quello che 'm utilizzando:

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

potrebbe anche essere necessario per consentire mod_rewite in voi configurazione di apache.

+0

Rimosso dal file, ma non funzionerà ancora. :( –

+0

Non funziona :(Non c'è un modo per controllare se l'intero file .htaccess è in esecuzione? –

9

Supponendo che la configurazione (/application/config/config.php) ha il index_page disabilitato:

$config['index_page'] = ''; 

E Apache DocumentRoot è: /srv/www/

Creare un file .htaccess allo stesso livello della directory /application/, con il seguente contenuto:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/

    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ index.php?/$1 [L] 
</IfModule> 

Si dovrebbe notare che RewriteBase punti al DocumentRoot (/). Se index.php si trova in un'altra directory, è necessario modificare RewriteBase di conseguenza.

Per una struttura di directory simile:

/srv/www/application/ 
/srv/www/system/ 
/srv/www/index.php 
/srv/www/.htaccess 

tuo RewriteBase dovrebbe essere: /

Per una struttura di directory simile:

/srv/www/codeigniter/application/ 
/srv/www/codeigniter/system/ 
/srv/www/codeigniter/index.php 
/srv/www/codeigniter/.htaccess 

tuo RewriteBase dovrebbe essere : /codeigniter/

E così via, si ottiene l'immagine.

0

Provare a modificare le impostazioni di configurazione uri_protocol. Inoltre, alcuni server richiedono questa modifica nel file htaccess:

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

Il punto interrogativo dopo l'ultima barra. Prova questo.

Assicurati anche che il tuo mod_rewrite sia attivo.

+0

Mod_rewrite è attivo e viene caricato in base alle informazioni di phpinfo(). Ma l'aggiunta non funziona.Inizio davvero a chiedermi se l'intera mod di riscrittura sta funzionando ... –

+0

Hm, sta riscrivendo QUALCHE COSA? Esegui alcuni test, anche al di fuori di CI, quindi sarai in grado di localizzare il problema. – Shomz

1

default .htaccess (da CI userguide http://ellislab.com/codeigniter/user-guide/general/urls.html)

RewriteEngine on 
RewriteCond $1 !^(index\.php|images|robots\.txt) 
RewriteRule ^(.*)$ /index.php/$1 [L] 

Ho confondere sopra il codice per un momento, ma ho codice come questo:

RewriteEngine on 
RewriteCond $1 !^(index\.php|robots\.txt|.*\.css|.*\.js|.*\.png) 
RewriteRule ^(.*)$ ./index.php/$1 [L] 

su localhost è necessario aggiungere"./"di fronte a index.php (3a riga) perché nel mio caso, la directory ci non è posizionata su root. Penso che "./" significhi che dovrebbe essere relativo al percorso. Per condizioni aggiuntive ".*\.css|.*\.js|.*\.png", significa che apache non dovrebbe riscrivere su file con estensioni css, js e png.

0

Se si verifica un 500 Internal Server Error. Il primo posto da cercare è il file apache error.log. Per me l'errore era relativo al comando .

valido comando 'AddOutputFilterByType', forse errata o definiti da un modulo non incluso nella configurazione del server.

Per la mia configurazione, due moduli non sono stati abilitati nella configurazione di apache, mentre i rispettivi comandi erano in uso nello .htaccess. Quindi, una volta abilitato lo filter_module e lo deflate_module, tutto è tornato alla normalità.