Comment supprimer "index.php" dans le chemin de codeigniter

Réponses:

90

Si vous utilisez Apache, placez un fichier .htaccess dans votre répertoire Web racine contenant les éléments suivants:

RewriteEngine on
RewriteCond $1 !^(index\.php|[Javascript / CSS / Image root Folder name(s)]|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

Une autre bonne version se trouve ici:

http://snipplr.com/view/5966/codeigniter-htaccess/

Sean Vieira
la source
2
+1 pour le lien! Bien que dû peaufiner un peu. Je l'ai obtenu avec ceci -> RewriteCond% {REQUEST_FILENAME}! -f RewriteCond% {REQUEST_FILENAME}! -d RewriteRule ^ (. *) $ index.php / $ 1 [QSA, L]
OrangeRind
pour une raison quelconque, j'ai dû ajouter une barre oblique au début du RewriteCond. RewriteCond $1 !^\/(index\.php|assets|robots\.txt)
Henry
Pour une raison quelconque, si vous avez index.php dans l'URL, il n'est pas réellement supprimé, il y reste et continue de fonctionner.
CMCDragonkai
1
J'ai utilisé toutes les combinaisons possibles et cela ne fonctionne toujours pas pour moi !!!!! comment l'avez-vous fait fonctionner?
Roshdy
Votre installation Apache doit être configurée pour vérifier les fichiers .htaccess - assurez-vous que c'est le cas.
Sean Vieira
60

J'ai eu de gros problèmes avec la suppression de index.php. En règle générale, le .htaccess ci-dessous a été testé sur plusieurs serveurs et fonctionne généralement:

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

<Files "index.php">
AcceptPathInfo On
</Files>  

Si vous n'avez pas de chance avec cela, l'étape suivante consiste à ajuster votre fichier de configuration. Essayez certains des autres protocoles URI, par exemple

| 'AUTO'            Default - auto detects
| 'PATH_INFO'       Uses the PATH_INFO
| 'QUERY_STRING'    Uses the QUERY_STRING
| 'REQUEST_URI'     Uses the REQUEST_URI
| 'ORIG_PATH_INFO'  Uses the ORIG_PATH_INFO

   $config['uri_protocol']  = 'ORIG_PATH_INFO';

Si vous n'avez toujours pas de chance, essayez de modifier la règle de réécriture pour inclure votre sous-dossier. C'est souvent un problème si vous utilisez une URL temporaire sur un serveur de développement, etc.:

RewriteRule ^(.*)$ /subofolder1/subfolder2/index.php/$1 [L]  

Jouez simplement avec ces options, l'une devrait fonctionner. Assurez-vous également que votre fichier d'index est défini sur:

$config['index_page'] = '';

Bonne chance!

jimbo2087
la source
Je pensais que votre premier code ici était la solution pour moi, mais en fait, il envoie simplement n'importe quelle URL comme domain / * à domain / index.php, il n'envoie pas de domaine / bienvenue au contrôleur de bienvenue. était alors excité pendant une seconde. essayez les autres suggestions maintenant.
jsky
31

Placez le fichier.htaccess dans le répertoire racine de l'application, ainsi que le fichier index.php. (Vérifiez si l'extension htaccess est correcte, Bz htaccess.txt n'a pas fonctionné pour moi.)

Et ajoutez les règles suivantes au fichier .htaccess,

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

Recherchez ensuite la ligne suivante dans votre fichier application / config / config.php

$config['index_page'] = 'index.php';

Définissez la variable vide comme ci-dessous.

$config['index_page'] = '';

Ça y est, ça a marché pour moi.

Si cela ne fonctionne pas davantage, essayez de remplacer la variable suivante par ces paramètres ('AUTO', 'PATH_INFO', 'QUERY_STRING', 'REQUEST_URI' et 'ORIG_PATH_INFO') un par un

$config['uri_protocol'] = 'AUTO';
Shaolin
la source
3
merci, j'échoue depuis longtemps, je ne sais pas pourquoi mais votre façon de travailler a fonctionné comme du beurre: D
Ahmed Samy
1
Merci MDeSilva. Ce message me fait gagner du temps.
sanji
1
Merci. Ça marche. BTW, je n'ai pas besoin de changer config.php.
Stony
1
Merci, celui-ci m'a aidé, j'ai utilisé PATH_INFO avec WAMP
T.Coutlakis
21

Jetez un œil dans le system\application\config\config.phpfichier, il y a une variable nomméeindex_page

ça devrait ressembler à ça

$config['index_page'] = "index.php";

changez-le en

$config['index_page'] = "";

Ensuite, comme mentionné, vous devez également ajouter une règle de réécriture au .htaccessfichier

Remarque: dans CodeIgniter v2, ce fichier a été déplacé du dossier système vers application\config\config.php

Re0sless
la source
9

Toutes les méthodes ci-dessus ont échoué pour moi, puis j'ai constaté que je ne changeais pas AllowOverride None en AllowOverride All dans mon fichier hôte virtuel à / etc / apache2 / sites-available / default

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
            Options FollowSymLinks
            AllowOverride All    <---- replace None with All
    </Directory>
    <Directory /var/www >
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All   <---  replace None with All
            Order allow,deny
            allow from all
    </Directory>

     ...

waqas
la source
Merci beaucoup, j'ai aussi ce AllowOverride None, maintenant ça marche!
Willy
Le blog est parti maintenant, et j'aurais beaucoup aimé le lire. Aucune de ces solutions ne fonctionne pour moi ...
Kevin Beal
génial, a sauvé ma journée.
JChow le
6
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /codeigniter/index.php/$0 [PT,L]

après avoir changé RewriteRule. * index.php / $ 0 [PT, L] avec le nom de dossier de projet "codeigniter" .its fonctionnant pour moi. Merci les gars pour votre soutien.

Capitaine Sparrow
la source
6

Étape 1 => Placez votre fichier .htaccess dans le dossier racine où se trouvent les dossiers d'application et système.

Étape 2 => Si votre chemin Web utilise un sous-dossier comme - votredomaine.com/project/ - utilisez le code suivant dans le fichier htaccess

RewriteEngine on
RewriteBase    /project/
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /project/index.php/$1 [L]

Si votre chemin Web en utilisant le dossier racine comme - votredomaine.com - utilisez le code suivant dans le fichier htaccess

RewriteEngine on
RewriteBase    /
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
vinod
la source
J'ai essayé d'utiliser le premier des exemples ci-dessus ne fonctionne que sur ma racine mais pas sur les chargements de formulaires, etc. essaiera toujours d'utiliser index.php dans les urls.Je vais jouer et y revenir si je peux le faire sortir
Sam
Merci @ Vinod.Je devenais fou avec ce problème.Je cherchais sur le net depuis si longtemps, j'ai essayé diverses solutions mais elles n'ont jamais fonctionné jusqu'à ce que je trouve votre solution.Maintenant, mon projet CI fonctionne et cela m'a donné un NOUVEL ESPOIR pour continuer avec CI.Merci beaucoup :)
gomesh munda
5

Je pensais juste que je pourrais ajouter

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

serait le .htaccess et assurez-vous de modifier votre variable application / config.php de la manière suivante:

remplacer

$config['uri_protocol'] = AUTO 

avec

$config['uri_protocol'] = REQUEST_URI
Jefkine Kafunah
la source
5
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L] 

Cela doit certainement fonctionner ... essayez

Ramaraju.d
la source
4

Assurez-vous que vous avez activé mod_rewrite(je ne l'avais pas fait).
Autoriser:

sudo a2enmod rewrite  

Remplacez également AllowOverride NoneparAllowOverride All

sudo gedit /etc/apache2/sites-available/default  

Enfin ...

sudo /etc/init.d/apache2 restart  

Mon .htaccess est

RewriteEngine on  
RewriteCond $1 !^(index\.php|[assets/css/js/img]|robots\.txt)  
RewriteRule ^(.*)$ index.php/$1 [L]  
miguelitomp
la source
Un autre module que j'avais besoin d'activer était actions: stackoverflow.com/questions/14419757/…
Jasdeep Khalsa
4

Solution parfaite [testée sur localhost ainsi que sur un domaine réel]

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L] 
Abhishek Goel
la source
3

Ceci est un .htaccess pour l'un de mes projets CI:

RewriteEngine on
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt)
RewriteRule ^(.*)$ /projectFolder/index.php/$1 [L] 

La dernière ligne devrait vous donner ce dont vous avez besoin, bien que vous ayez besoin ou non de «/ projectFolder» en fonction de la configuration de votre structure de dossiers. Bonne chance!

Matthew Rapati
la source
3

En tant que fichier .htaccess, une bonne option est d'utiliser celui fourni par Kohana Framework :

# Turn on URL rewriting
RewriteEngine On

# Installation directory
RewriteBase /

# Protect hidden files from being viewed
<Files .*>
    Order Deny,Allow
    Deny From All
</Files>

# Protect application and system files from being viewed
RewriteRule ^(?:application|system)\b.* index.php/$0 [L]

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]

C'est un .htaccess bien pensé qui fonctionne.

Laurent
la source
3

Il existe deux façons de résoudre index.php dans le chemin de l'url pour codeigniter

1: Dans config / config.php Changez le code:

$config['index_page'] = 'index.php';

à

$config['index_page'] = '';

2: Créez .htacess dans le chemin racine s'il n'est pas créé, copiez le code suivant: -

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

Enregistrez-le puis archivez votre configuration Apache rewrite_module OU mod_rewrite est activé.Sinon, veuillez activer. (Meilleure approche)!

Devraj Gupta
la source
Ceci est correct et directement tiré de la documentation CodeIgniter. J'utilise également cette méthode.
Dewald Els
2

J'ai testé cela sur apache2 sur de nombreux hébergements différents et cela fonctionne très bien.

utilisez cet htaccess

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

assurez-vous d'avoir enabled mod_rewirteavec unphpinfo();

puis faites ceci dans config / config.php:

$config['index_url']    = '';
|
| 'AUTO'            Default - auto detects
| 'PATH_INFO'       Uses the PATH_INFO
| 'QUERY_STRING'    Uses the QUERY_STRING
| 'REQUEST_URI'     Uses the REQUEST_URI
| 'ORIG_PATH_INFO'  Uses the ORIG_PATH_INFO
|
*/
$config['uri_protocol'] = 'AUTO';

si cela ne fonctionne pas encore, essayez de remplacer le fichier par l'un des fichiers $config['uri_protocol']='AUTO'listés à l'intérieur application/config/config.phpà la ligne 40/54:

parfois j'ai utilisé: REQUEST_URIau lieu de AUTOou "QUERY_STRING"pour les hébergements goDaddy

c'est moi
la source
2

Regardez dans le \application\config\config.phpfichier, il y a une variable nomméeindex_page

ça devrait ressembler à ça

$config['index_page'] = "index.php";

changez-le en

$config['index_page'] = "";

Ensuite, comme mentionné, vous devez également ajouter une règle de réécriture au .htaccessfichier comme ceci:

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

Cela fonctionne pour moi, j'espère que vous aussi.

planeur
la source
2

Si vous êtes sous Linux et que vous utilisez un serveur apache2, nous devrons peut-être remplacer le fichier apache2.conf également à côté des modifications apportées au fichier .htaccess. Trouvez le fichier de configuration apache2 sur /etc/apache2/apache2.conf .

Répertoire de recherche / var / www / Modifier AllowOverride None -> AllowOverride All

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory
rabin
la source
1

placez un fichier .htaccess dans votre répertoire Web racine

Quoi que vous fassiez - si ce qui précède n'est pas satisfait - cela ne fonctionnera pas. Habituellement, il se trouve dans le dossier System, il devrait être à la racine. À votre santé!

foxybagga
la source
2
Après avoir passé quelques heures, j'ai lu ceci et j'ai trouvé mon erreur.
mohsin.mr
J'ai aussi passé au moins une heure à cause de ce "petit" truc. Par défaut, les fichiers .htaccess viennent dans le applicationrépertoire au lieu de la racine.
vadim le
1

J'ai essayé de nombreuses solutions mais celle que j'ai trouvée est la suivante:

DirectoryIndex index.php
RewriteEngine on

RewriteCond $1 !^(index\.php|(.*)\.swf|forums|images|css|downloads|jquery|js|robots  \.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php?$1 [L,QSA]

Cela supprimera l'index.php de l'URL si nécessaire.

codegeek
la source
0

Cela vous aidera à coller ce code dans le dossier de l'application dans le fichier .htacess

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

<Files "index.php">
AcceptPathInfo On
</Files>
<IfModule mod_php5.c>
  php_value short_open_tag 1
</IfModule>
Majid
la source
0

Celui-ci m'a fait la magie complète:

RewriteEngine on
RewriteBase /
# Hide the application and system directories by redirecting the request to index.php
RewriteRule ^(application|system|\.svn) index.php/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [QSA,L]

J'espère que ça aide!

bmnepali
la source
0

Salut celui-ci m'a travaillé

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

ainsi que cette

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

où le dossier est le nom du sous-dossier si cette application codeigniter est hébergée en tant que sous-domaine, par exemple nom de domaine / dossier / index.php.

J'espère que cela fonctionne pour vous. Merci.

allumer
la source
0

Copiez le code suivant dans votre .htaccess

RewriteEngine on
Options -Indexes
RewriteCond $1 !^(index\.php|assets|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
dev87
la source
Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire concernant la raison et / ou la manière dont ce code répond à la question améliore sa valeur à long terme.
Benjamin W.
0
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /Foldername of your ci/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
mohd jagir
la source
0

Étape 1 :

Ajoutez ceci dans le fichier htaccess

<IfModule mod_rewrite.c> 
RewriteEngine On 
#RewriteBase / 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^ index.php [QSA,L] 
</IfModule>

Étape 2 :

Supprimer index.php dans la configuration de codeigniter

$config['base_url'] = ''; 
$config['index_page'] = '';

Étape 3 :

Autoriser le remplacement de htaccess dans la configuration Apache (commande)

sudo nano /etc/apache2/apache2.conf et éditez le fichier et changez en

AllowOverride All

pour le dossier www

Étape 4 :

Réécriture de mod apache activée (commande)

réécriture sudo a2enmod

Étape 5:

Redémarrez Apache (commande)

sudo /etc/init.d/apache2 restart
Shashank Saxena
la source