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/


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!


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';

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


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>

     ...


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.


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]

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

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

Cela doit certainement fonctionner ... essayez


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]  

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] 

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!



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.


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


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


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.


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

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


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.



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>

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!


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.


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]

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>

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.