2010-09-20 2 views
17

Utilizzo CodeIgniter per due applicazioni (un'app pubblica e un'app di amministrazione). Gli elementi importanti della struttura del documento sono:CodeIgniter 404 Pagina non trovata, ma perché?

/admin 
/admin/.htaccess 
/admin/index.html 
/application 
/application/admin 
/application/public 
/system 
.htaccess 
index.php 

Il file /admin/.htaccess assomiglia a questo:

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

Il /admin/index.php presenta le seguenti modifiche:

$system_folder = "../system"; 
$application_folder = "../application/admin"; (this line exists of course twice) 

E il /application/admin/config/routes.php contiene quanto segue:

$route['default_controller'] = "welcome"; 
$route['admin'] = 'welcome'; 

Benvenuto è il mio controller predefinito.

Quando richiamo il dominio/admin, viene visualizzato un errore 404 Page Not Found. Quando richiamo il dominio/admin/welcome, tutto funziona correttamente. Nei registri di debug ottengo il seguente messaggio di errore:

DEBUG - 2010-09-20 16:27:34 --> Config Class Initialized 
DEBUG - 2010-09-20 16:27:34 --> Hooks Class Initialized 
DEBUG - 2010-09-20 16:27:34 --> URI Class Initialized 
ERROR - 2010-09-20 16:27:34 --> 404 Page Not Found --> admin 

Stranamente questa configurazione funziona perfettamente su mia installazione MAMP locale (con la localdomain/admin /), ma quando ho pubblicare e provare sul "live" server, ottengo solo 404 errori.

Qualche idea? Che cosa sto facendo di sbagliato? Grazie C.

+0

Solo un pensiero, forse il server live non sta eseguendo mod_rewrite? Il server live ti dà solo 404 o occasionali? – Fanis

+0

Sembra funzionare: l'ho appena testato con un catch di tutti i domini non www e reindirizzato a google.com. Gli errori 404 sono sicuramente generati da CI (perché usano il CSS). – Joseph

+0

Volevo solo postare che se stai usando una NUOVA INSTALLAZIONE di Codeigniter 3 e hai uno spazio nel nome della cartella di hosting, servirà un 404. Versione 3.0.0 –

risposta

15

La causa del problema era che il server eseguiva PHP utilizzando FastCGI.

Dopo aver cambiato il config.php per

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

tutto ha funzionato.

+0

Il routing ha iniziato a funzionare, ma ora la CLI restituisce la schermata 'Benvenuti in CodeIgniter'. comunque intorno ad esso? Ho postato più informazioni [qui] (http://stackoverflow.com/questions/25545696/codeigniter-htaccess-rewriterule-result-in-404-page-not-found#comment39888065_25545696) – Kuf

1

La struttura della cartella/file mi sembra un po 'strana. Non riesco a capire come hai risolto questo.

Ciao Sto utilizzando CodeIgniter per due applicazioni (un'app pubblica e un'app di amministrazione).

Mi sembra che tu abbia due installazioni CI separate. Se questo è il caso, lo raccomanderei contro. Perché non gestire tutti gli elementi di amministrazione in un controller di amministrazione? Se vuoi due installazioni CI separate, assicurati che siano entità distinte e che i due non siano in conflitto tra loro. Questa linea:

$system_folder = "../system"; 
$application_folder = "../application/admin"; (this line exists of course twice) 

E il posto che ha detto questo esiste (/admin/index.php...or Cercavi/admin/application/config?) Mi ha graffiare la mia testa. Hai admin/application/admin e una cartella di sistema al livello più alto?

+0

Questo è il modo in cui strutturo le mie applicazioni. Ho un'app di amministrazione e un'app Web. Entrambi condividono una cartella di sistema ('../sistema'), e ognuno ha una cartella app separata ('../application/admin'), ('../application/website'). – Matthew

+0

Si basa su questo: http://codeigniter.com/user_guide/general/managing_apps.html Esiste solo una cartella di sistema. Ho spostato la cartella dell'applicazione allo stesso livello della cartella di sistema. – Joseph

+0

Intendo che nel file /admin/index.php ho modificato le righe 26, 43 e 101 – Joseph

1

Dobbiamo dare il nome del controller in casi inferiori a lato server

$this->class = strtolower(__CLASS__); 
0

Nel mio caso ho usato su localhost e si è dimenticato di cambiare RewriteBase in .htaccess.

-2

Check Your Directory trovare qualsiasi spazio Codignater tempi molti danno errore quando si Spazio nella vostra directory di Codignater Rimuovi tutto spazio dal repertorio Esempio

ITWORLD compk 

cambiare a

ITWORLD_COM_PK 
4

Leaving questa risposta qui per gli altri che si sono imbattuti nella mia situazione.

La mia app codeigniter funzionava correttamente in localhost/WAMP, ma non è stata in grado di instradare e ha prodotto 404 errori non rilevati durante il push su un'istanza AWS EC2. Il mio problema è stato risolto dalla risposta da HEREhtaccess works in localhost but doesn't work in EC2 instance

(itinerario alla mia pagina di amministrazione) {domain}/admin stava producendo 404

il file /etc/httpd/conf/httpd.conf deve essere modificato.

- dopo ogni istanza di "DocumentRoot"/var/www/html "" (2 posizioni) "AllowOverride None" deve essere modificato in "AllowOverride All".

Riavviata l'istanza EC2 dal dashboard di AWS.

{domain}/admin è ora accessibile e funziona come previsto.

spero che questo aiuti qualcun altro come me mi ha aiutato!

+0

Grazie, ha funzionato per me –

3

Si potrebbe provare una delle due cose o una combinazione di entrambi.

  1. Assicurarsi che il nome del controller inizi con una lettera maiuscola. es. "Mycontroller.php"
  2. Se non hai apportato alcuna modifica al percorso, per qualche strana ragione, potresti dover includere lettere maiuscole nell'URL. ad esempio se il tuo controller è "Mycontroller.php" con una funzione denominata "testfunc" al suo interno, l'url avrà il seguente aspetto: "http://www.yourdomain/index.php/Mycontroller/testfunc". Nota la lettera maiuscola. (Sto assumendo che non hai aggiunto il file .htaccess per rimuovere la parte 'index.php'. Se avete, basta rimuoverlo dal URL.)

Spero che questo aiuta qualcuno

+0

Il controllore ha effettivamente bisogno di essere maiuscola, ma accedervi tramite l'URL non richiede necessariamente di inserire la lettera maiuscola nell'URL. – PhoenixNoor

0

Ho avuto lo stesso problema dopo la migrazione a un nuovo ambiente ed è stato semplicemente che il server non ha eseguito mod_rewrite

un rapido sudo a2enmod rewrite poi sudo systemctl restart apache2

e problema risolto ... @fanis

Grazie che indicavano che nel suo commento sulla questione.