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
versUbuntu 13.x
inclut une version mise à jour dePHP
de la version5.3
d’Ubuntu 12.x
vers la version5.5
d’Ubuntu 13.x
J’utilise beaucoup de code qui fonctionne enPHP 5.3
etPHP 5.4
mais se brise parfois enPHP 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.