web-dev-qa-db-fra.com

CodeIgniter 404 Page introuvable, mais pourquoi?

J'utilise CodeIgniter pour deux applications (une application publique et une application d'administration) . Les éléments importants de la structure du document sont les suivants:

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

Le fichier /admin/.htaccess ressemble à ceci: 

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

Le fichier /admin/index.php contient les modifications suivantes:

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

Et le /application/admin/config/routes.php contient les éléments suivants: 

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

Welcome est mon contrôleur par défaut.

Lorsque j'appelle le domaine/admin, j'obtiens une erreur 404 Page Not Found. Quand j'appelle le domaine/admin/bienvenue tout fonctionne bien. Dans les journaux de débogage, le message d'erreur suivant s'affiche: 

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

Bizarrement, cette configuration fonctionne parfaitement sur mon installation MAMP locale (avec le domaine local/admin /), mais lorsque je le publie et le teste sur le serveur "live", je ne reçois que 404 erreurs. 

Des idées? Qu'est-ce que je fais mal? Merci C.

18
Joseph

La cause du problème était que le serveur exécutait PHP à l'aide de FastCGI.

Après avoir changé le fichier config.php en

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

tout a fonctionné.

15
Joseph

Laissant cette réponse ici pour les autres qui ont couru dans ma situation.

Mon application codeigniter fonctionnait correctement dans localhost/WAMP, mais elle était incapable de router et produisait 404 erreurs non trouvées lors du transfert vers une instance AWS EC2. Mon problème a été résolu à partir de la réponse de ICIhtaccess fonctionne dans localhost mais ne fonctionne pas dans les instances EC2

(route vers ma page d'administration) {domain}/admin produisait 404

le fichier /etc/httpd/conf/httpd.conf doit être modifié. 

-après chaque instance de "DocumentRoot"/var/www/html "" (2 emplacements) "AllowOverride None" devait être remplacé par "AllowOverride All".

Redémarrez l'instance EC2 à partir du tableau de bord AWS.

{domain}/admin est maintenant accessible et fonctionne comme prévu.

espérons que cela aide quelqu'un d'autre comme ça m'a aidé!

6
JoshuaC

Vous pouvez essayer l'une des deux choses ou une combinaison des deux.

  1. Assurez-vous que le nom de votre contrôleur commence par une lettre majuscule. par exemple "Mycontroller.php"
  2. Si vous n'avez pas modifié votre itinéraire, pour une raison étrange, vous devrez peut-être inclure des majuscules dans votre URL. Par exemple, si votre contrôleur est "Mycontroller.php" avec une fonction nommée "testfunc" à l'intérieur, votre url ressemblera à ceci: " http: //www.votre domaine/index.php/Mycontroller/testfunc " Notez la lettre majuscule. (Je suppose que vous n'avez pas ajouté le fichier htaccess pour supprimer la partie 'index.php'. Si c'est le cas, supprimez-le simplement de l'URL.)

J'espère que ça aidera quelqu'un

5
Amin Balogun
  1. Changez la première lettre du nom de votre contrôleur en majuscule.
  2. Changez votre URL de la même façon que votre nom de contrôleur.

par exemple:

Votre nom de contrôleur est YourController

Votre URL doit être:

http://example.com/index.php/YourController/method

Ne pas être:

http://example.com/index.php/yourcontroller/method

3
DevYuan

nous devons donner le nom du contrôleur en minuscules côté serveur

$this->class = strtolower(__CLASS__);
2
MAK

J'ai eu le même problème après la migration vers un nouvel environnement et c'était simplement que le serveur n'a pas exécuté mod_rewrite

un rapide Sudo a2enmod rewrite puis Sudo systemctl restart Apache2

et problème résolu ...

Merci aux @fanis qui l'ont souligné dans leur commentaire sur la question.

1
Antony P.

Votre structure de dossier/fichier me semble un peu étrange. Je n'arrive pas à comprendre comment vous avez prévu cela.

Bonjour, j'utilise CodeIgniter pour deux applications (une application publique et une application d'administration).

Cela me semble avoir deux installations de CI distinctes. Si tel est le cas, je le déconseille. Pourquoi ne pas simplement gérer tous les trucs admin dans un contrôleur admin? Si vous souhaitez deux installations de CI distinctes, assurez-vous qu’il s’agit bien d’entités distinctes et que les deux ne sont pas en conflit. Cette ligne:

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

Et l'endroit où vous avez dit que cela existe (/admin/index.php...ou voulez-vous dire/admin/application/config?) M'a fait me gratter la tête. Vous avez admin/application/admin et un dossier système au plus haut niveau?

1
treeface

Dans mon cas, je l'utilisais sur localhost et j'avais oublié de changer RewriteBase dans .htaccess.

0
user3526