CodeIgniter supprimer index.php ne fonctionne pas

J’utilise Ubuntu 13 avec la configuration suivante pour un site d’indicatif de code local.

Apache/2.4.6 (Ubuntu) 5.5.3-1ubuntu2.2 'CI_VERSION', '2.1.2' 

Et les URL ne fonctionnent plus sans index.php . Ils fonctionnaient, mais après la mise à niveau d’ Ubuntu 12.x vers 13.x et quelques mises à jour d’Apache au cours de la dernière année, les sites localhost ne fonctionnent plus correctement.

si je vais à localhost/index.php/controllername/ ça marche mais si je vais à localhost / controllername / ça ne marche pas.

mod_rewrite est activé.

CodeIgniter config a:

 $config['index_page'] = ''; $config['uri_protocol'] = 'AUTO'; // sortinged all available options here and 

Rien n’a fonctionné

dans le fichier .conf pour le domaine, j’ai ceci:

  Options -Multiviews +FollowSymLinks AllowOverride All  

et voici les lignes commentées du fichier .htaccess que j’ai essayées et qui ne fonctionnaient pas.

  RewriteEngine On RewriteBase / # RewriteCond $1 !^(index\.php|robots\.txt) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?/$1 [L] # RewriteRule .* index.php/$0 [PT,L] # RewriteRule ^(.*)$ index.php/$1 [L,QSA]   ErrorDocument 404 /index.php  

J’ai googlé et lu tout ce que je peux trouver et essayé tout ce que j’ai pu trouver, y compris plusieurs messages ici sur Stack Overflow, y compris ceux dans les “Questions qui peuvent déjà avoir votre réponse.” Toujours rien ne semblait fonctionner. Mais comme je l’ai dit, cela a fonctionné dans le passé, mais seulement après plusieurs mises à jour du système d’exploitation et d’Apache, j’ai tout d’abord remarqué que cela ne fonctionnait plus.

Je vais m’éloigner de CodeIgniter avec des projets futurs, mais ces projets existaient déjà. Déçu par ce qui pourrait être le problème.

SOLUTION:

s’avère que ce n’était pas un problème de codification. C’était un problème Apache mais pas avec les règles de réécriture. dans mon apache2.conf je devais modifier le bloc pour / var / www /

Exiger que tout soit accordé semble avoir fait l’affaire.

DirectoryIndex index.php index.html Options Indexes FollowSymLinks AllowOverride All Requiert tout accordé

juste pour faire bonne mesure, j’ai fait le changement ici aussi: Options FollowSymLinks AllowOverride All Requis tout accordé

trouvé sur askubuntu https://askubuntu.com/questions/421233/enabling-htaccess-file-to-rewrite-path-not-working

copier le code suivant à .htaccess dans votre dossier racine

 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule .* index.php/$0 [PT,L] Options All -Indexes 

Cela fonctionne très bien pour que je supprime index.php dans CodeIgniter.

Il ne semble pas que CodeIgniter ait une valeur par défaut .htaccess , donc peu claire d’où cela vient. Mais à des fins de débogage, je vous recommande de procéder comme suit. Tout d’abord, voici votre .htaccess tout nettoyé:

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

Maintenant, remplacez votre index.php par ceci. Il ne $_GET valeurs $_GET transmises via le .htaccess comme $_GET :

 echo '
'; print_r($_GET); echo '

';

Maintenant, avec cela dans votre .htaccess charger la page d’index du site / app / projet en question. Le résultat devrait être quelque chose comme ceci:

 Array ( [/controllername/here/] => ) 

Ce qui semble être correct. Mais encore une fois, vous sauriez mieux que nous.

Le but de ceci est d’évaluer si le problème est dans Apache en passant les valeurs $_GET appropriées à votre installation CodeIgniter, qui est un problème. Ou si le problème est dans la logique de votre contrôleur CodeIgniter lui-même.

Mon instinct me dit que le problème est dans la logique CodeIgniter de votre base de code depuis la mise à niveau d’ Ubuntu 12.x vers Ubuntu 13.x inclut une version mise à jour de PHP de la version 5.3 d’ Ubuntu 12.x vers la version 5.5 d’ Ubuntu 13.x J’utilise beaucoup de code qui fonctionne en PHP 5.3 et PHP 5.4 mais se brise parfois en PHP 5.5 car il y a des changements majeurs dans cette base de code qui provoquera la rupture du code si vous ne gardez pas les fonctions non amorties. .

Je voudrais essayer quelque chose comme:

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

Si vous savez quelle variable GET le script attend pour nom- controllername sous localhost/controllername , dans la règle, remplacez myvariable variable par ce nom de variable.