Je n'ai jamais utilisé CodeIgniter auparavant, encore moins N'IMPORTE QUEL framework php et je pensais pouvoir l'essayer. Tout se passe bien sauf que je n'arrive pas à supprimer l'index.php de l'URL et à accéder à mes pages.
Je n'ai jamais utilisé la structure MVC, donc j'apprends au fur et à mesure, alors pardonnez-moi si je me trompe.
J'essaie d'accéder à une vue que j'ai créée et appelée "about_page.php" en tapant simplement dans localhost/ci/about, mais je ne peux actuellement y accéder qu'en utilisant localhost/ci/index.php/about
Le contrôleur de la page est: /application/controllers/about.php
Le modèle de la page est: /application/models/about_model.php
Et la vue pour la page est: /application/views/about_page.php
J'ai cherché une solution à ce problème, mais je n'ai pas réussi à en trouver une. Voici où j'ai déjà cherché:
CodeIgniter - suppression de index.php
Codeigniter - comment faire pour supprimer le fichier index.php de l’URL?
http://www.farinspace.com/codeigniter-htaccess-file/
CodeIgniter est livré avec un fichier .htaccess dans le dossier 'application' qui ne contient que Allow Deny From All
. J'ai donc créé un nouveau fichier .htaccess dans le répertoire racine, http://localhost/ci/.htaccess
, et y ai ajouté le code suivant:
RewriteEngine On
RewriteBase /ci
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
Lorsque le fichier .htaccess se trouve dans le répertoire racine, j'obtiens une erreur de 500 serveur interne. Lorsque je copie exactement le même fichier dans le dossier des applications, l'erreur 500 disparaît mais je ne peux toujours pas accéder à la page à propos en utilisant localhost/ci/about
J'ai déjà changé $config['index_page'] = 'index.php';
en $config['index_page'] = '';
ET j'ai essayé de changer $config['uri_protocol'] = 'AUTO';
en $config['uri_protocol'] = 'REQUEST_URI';
mais j'obtiens toujours l'erreur Internal Server.
Je suis allé dans le fichier httpd.conf et je n'ai pas commenté le module mod_rewrite.so, donc je sais que mod_rewrite est actif.
Quelqu'un a-t-il une idée des raisons pour lesquelles cela ne fonctionne pas ou comment je peux obtenir ce travail? Je sais qu'il y a beaucoup de questions sur StackOverflow à ce sujet mais je n'ai pas pu en trouver une qui réponde à ma question.
Est-ce que je le fais bien? Devrais-je même pouvoir accéder à la page about en visitant localhost/ci/about ou dois-je créer un répertoire "about" dans le répertoire "application"?
Il y a 3 étapes pour supprimer index.php
.
Apportez les modifications ci-dessous dans le fichier application/config.php
$config['base_url'] = 'http://'.$_SERVER['SERVER_NAME'].'/Your Ci folder_name';
$config['index_page'] = '';
$config['uri_protocol'] = 'AUTO';
Créez le fichier .htaccess
dans votre répertoire racine en utilisant le code ci-dessous
RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
Activer le moteur de réécriture (s'il n'est pas déjà activé)
je. Tout d'abord, lancez-le avec la commande suivante:
a2enmod rewrite
ii. Modifier le fichier /etc/Apache2/sites-enabled/000-default
Remplacez tous AllowOverride None
par AllowOverride All
.
Remarque: dans la dernière version, vous devez modifier le fichier /etc/Apache2/Apache2.conf
.
iii. Redémarrez votre serveur avec la commande suivante:
Sudo /etc/init.d/Apache2 restart
Votre .htaccess
est légèrement éteint. Regarde le mien:
RewriteEngine On
RewriteBase /codeigniter
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|images|robots\.txt|css|docs|js|system)
RewriteRule ^(.*)$ /codeigniter/index.php?/$1 [L]
Remarquez "codeigniter" à deux endroits.
après cela, dans votre config:
base_url = "http://localhost/codeigniter"
index = ""
Remplacez codeigniter par "ci" le cas échéant
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /dmizone_bkp
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|images|robots\.txt|css|docs|js|system)
RewriteRule ^(.*)$ /dmizone_bkp/index.php?/$1 [L]
</IfModule>
Ça marche pour moi
Déplacez votre fichier .htaccess dans le dossier racine (à localiser avant le dossier de l'application dans mon cas)
RewriteEngine on
RewriteBase /yourProjectFolder
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]
Mine config.php ressemble à ceci (application/config / config.php )
$config['base_url'] = "";
$config['index_page'] = "index.php";
$config['uri_protocol'] = "AUTO";
Faites-moi savoir si cela fonctionne pour vous aussi! À votre santé !
J'utilise quelque chose comme ceci - codeigniter-htaccess-file , c'est un bon article pour commencer.
$config['index_page'] = "";
$route['default_controller']="home";
Si vous exécutez une installation propre de CI (2.1.3), il n’ya pas grand-chose qui pourrait être faux.
lis
Pour les utilisateurs de wamp server, suivez les 2 premières étapes de la solution de @Raul Chipad:
J'ai eu un problème similaire sur Linux Ubuntu 14.
Après 403 messages d'erreur constants dans le navigateur et la lecture de toutes les réponses, je ne pouvais pas comprendre ce qui n'allait pas.
Ensuite, j'ai atteint le journal des erreurs d'Apache et j'ai finalement obtenu un indice quelque peu inattendu mais parfaitement logique.
le dossier principal de codeIgniter n'avait pas de permission X sur le dossier, rendant tout le reste illisible par le serveur Web.
chmod ugo + x yourCodeIgniterFolder
résolu premier problème. Tué 403 erreurs.
Mais ensuite j'ai commencé à avoir l'erreur 500.
Le coupable était une mauvaise ligne de paramètres dans .htaccess
Ensuite, j'ai commencé à avoir des erreurs php.
Le coupable était le même problème que le dossier principal sans indicateur X pour l'autorisation 'autres' pour les dossiers internes des dossiers de l'application et du système.
Mes deux cents pour cette question: LIRE Apache Error.log.
Mais, soyez également conscient des problèmes de sécurité. CodeIgniter suggère de déplacer l'application et le dossier système hors de l'espace Web. Par conséquent, les autorisations de modification doivent être prises avec une grande prudence si ces dossiers restent dans l'espace Web.
Une autre chose à noter ici est que j'ai décompressé l'archive CodeIgniter téléchargée directement sur l'espace Web. Les autorisations de dossier sont probablement créées directement à partir de l'archive. Bien sûr, ils sont sécurisés, mais le problème d'accès aux dossiers (sur les systèmes similaires à Unix) n'est pas mentionné dans le manuel CodeIgniter https://codeigniter.com/user_guide/installation/index.html et peut-être y sera-t-il mentionné avec des instructions sur la façon de relâcher la sécurité de CodeIgniter tout en maintenant la sécurité du système de production (certains conseils de sécurité figurent déjà dans le manuel, comme mentionné précédemment).
si ne fonctionne pas
$config['uri_protocol'] = 'AUTO';
changez le en
$config['uri_protocol'] = 'PATH_INFO';
si cela ne fonctionne pas, changez le en
$config['uri_protocol'] = 'QUERY_STRING';
si utiliser ceci
$config['uri_protocol'] = 'ORIG_PATH_INFO';
avec une redirection ou un en-tête vers URL ne figurant pas dans htaccess ne fonctionnera pas
Par défaut, le fichier ci-dessous se trouve dans le dossier application
, déplacez-le comme suggéré dans le répertoire racine.
leave the .htaccess file in CI root dir
Ajoutez simplement ceci dans le fichier .htaccess:
DirectoryIndex index.php
RewriteEngine on
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php?/$1 [L,QSA]