web-dev-qa-db-fra.com

Problèmes de codeIgniter htaccess et de réécriture d'URL

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"?

35
Ty Bailey

Il y a 3 étapes pour supprimer index.php.

  1. 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';
    
  2. 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]
    
  3. 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
    
69
Rahul Chipad

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

5
jmadsen
<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> 
4
Vinilnbr

Ç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é !

2
William Kheng

J'utilise quelque chose comme ceci - codeigniter-htaccess-file , c'est un bon article pour commencer. 

  • laissez le fichier .htaccess dans le répertoire racine de CI 
  • assurez-vous que mod_rewrite est activé
  • vérifier les fautes de frappe (c'est-à-dire le nom du fichier/de la classe du contrôleur)
  • dans /application/config/config.php set $config['index_page'] = ""; 
  • dans /application/config/routes.php set votre contrôleur par défaut $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.

  • 2 fichiers de configuration 
  • manette 
  • .htaccess
  • mod_rewrite

lis

2
Velja Matic

Pour les utilisateurs de wamp server, suivez les 2 premières étapes de la solution de @Raul Chipad:

  1. Cliquez sur l'icône wamp (normalement en vert), allez à "Apache"> "Modules Apache"> "rewrite_module". Le "rewrite_module" devrait être coché! Et puis c'est le chemin à parcourir!
1
Kusaasira Joshua

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).

1
ljgww

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

1

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

0
Cyber

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]
0
Siddharth Shukla