web-dev-qa-db-fra.com

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

Comment puis-je supprimer le "index.php" qui dépasse dans chaque chemin d'accès de codeigniter quelque part au centre? Je veux nettoyer non index.php-fied URLs?

113
OrangeRind

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/

88
Sean Vieira

J'ai eu de gros problèmes avec la suppression du fichier 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, la prochaine étape 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. Cela pose souvent un problème si vous utilisez une URL temporaire sur un serveur de développement, etc.:

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

Il suffit de jouer avec ces options, il faut travailler. Assurez-vous également que votre fichier d'index est défini sur:

$config['index_page'] = '';

Bonne chance!

60
jimbo2087

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]  

Puis trouvez 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 fonctionné pour moi.

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

$config['uri_protocol'] = 'AUTO';
30
Shaolin

Regardez dans le fichier system\application\config\config.php, il y a une variable nommée index_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 fichier .htaccess.

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

21
Re0sless

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 à l'adresse / 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>

     ...

9
waqas

Étape 1 => Placez votre fichier .htaccess dans le dossier racine contenant les dossiers de l’application et du système.

Étape 2 => Si votre chemin Web utilise un sous-dossier tel que - 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 utilisant un 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]
6
vinod
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 du dossier de projet "codeigniter" .si fonctionne pour moi. Merci les gars pour votre soutien.

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

Cela doit absolument marcher .. essayez

5
Ramaraju.d

Juste pensé 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
Jefkine Kafuna

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

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

Utilisez mod_rewrite comme indiqué dans ce tutoriel à partir du wiki CI.

3
Ben S

Ceci est un .htaccess pour 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 éventuellement besoin de '/ projectFolder' en fonction de la structure de votre dossier Bonne chance!

3
Matthew Rapati

Assurez-vous d'avoir activé mod_rewrite (ce que je n'avais pas fait).
Autoriser: 

Sudo a2enmod rewrite  

Aussi, remplacez AllowOverride None par AllowOverride 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]  
3
miguelitomp

Il y a deux façons de résoudre index.php dans le chemin de l'URL pour codeigniter

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

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

à

$config['index_page'] = '';

2: Créez le fichier .htacess dans le chemin racine s'il n'a pas été 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 vérifiez dans votre configuration Apache rewrite_module OR mod_rewrite est activé.Si ce n'est pas le cas, activez-le ... (meilleure approche)!

3
Devraj Gupta

En tant que fichier .htaccess, une bonne option consiste à 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
this.lau_

Regardez dans le fichier \application\config\config.php, il y a une variable nommée index_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 fichier .htaccess 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, espérons que vous aussi.

2
glider

j'ai testé cela sur Apache2 sur de nombreux hébergements et cela fonctionne très bien.

utiliser ce htaccess

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

assurez-vous que vous avez enabled mod_rewirte avec une phpinfo();

faites ensuite 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 $config['uri_protocol']='AUTO' par l'un des fichiers application/config/config.php répertoriés à la ligne 40/54:

parfois, j'ai utilisé: REQUEST_URI au lieu de AUTO ou "QUERY_STRING" pour les hébergements goDaddy

2
itsme

Si vous êtes sur Linux et utilisez le serveur Apache2, il se peut que nous devions remplacer le fichier Apache2.conf également à côté des modifications apportées au fichier .htaccess. Recherchez le fichier de configuration Apache2 dans /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
2
rabin

J'ai essayé de nombreuses solutions, mais celle que j'ai proposé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]

Ceci enlèvera le fichier index.php de l'URL si nécessaire.

1
codegeek

J'utilise ces lignes dans le fichier .htaccess; que je place dans le dossier racine

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

Ensuite, je peux accéder à http://example.com/controller/function/parameter

au lieu de http://example.com/index.php/controller/function/parameter

1
Scorpion

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

Quoi que vous fassiez, si cela n’est pas respecté, cela ne fonctionnera pas. Habituellement, c'est dans le dossier Système, il devrait être à la racine. À votre santé!

1
foxybagga

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
bmnepali

étape 1:

Ajouter 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 codeigniter config

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

étape 3:

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

Sudo nano /etc/Apache2/Apache2.conf et éditez le fichier & changez pour

AllowOverride All

pour le dossier www

étape 4:

Activation de la réécriture du mod Apache (Commande)

Sudo a2enmod réécrire

étape 5:

Redémarrer Apache (Commande)

Sudo /etc/init.d/Apache2 restart
0
Shashank Saxena

Cela vous aidera Collez ce code dans le dossier de l'application dans le fichier .htaccess

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
Majid
<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
mohd jagir

Copier coller 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]
0
dev87

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 ex. nomdomaine/folder/index.php.

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

0
lightup