Come rimuovere "index.php" nel percorso di codeigniter


Risposte:


90

Se stai usando Apache, inserisci un file .htaccess nella tua directory web principale contenente quanto segue:

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

Un'altra buona versione si trova qui:

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


2
+1 per il collegamento! Anche se ho dovuto modificare un po '. capito con questo -> RewriteCond% {REQUEST_FILENAME}! -f RewriteCond% {REQUEST_FILENAME}! -d RewriteRule ^ (. *) $ index.php / $ 1 [QSA, L]
— OrangeRind

per qualche motivo, ho dovuto aggiungere una barra all'inizio del RewriteCond. RewriteCond $1 !^\/(index\.php|assets|robots\.txt)
— Henry

Per qualche motivo, se hai index.php nell'URL, non viene effettivamente rimosso, rimane lì e continua a funzionare.
— CMCDragonkai

1
Ho usato tutte le combinazioni possibili e ancora non funziona per me !!!!! come hai fatto a farlo funzionare ??
— Roshdy

La tua installazione di Apache deve essere configurata per controllare i file .htaccess: assicurati che sia così.
— Sean Vieira

60

Ho avuto alcuni grossi problemi con la rimozione di index.php. Come regola generale, il file .htaccess di seguito è stato testato su diversi server e generalmente funziona:

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

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

Se non hai fortuna, il passaggio successivo è modificare il file di configurazione. Prova alcuni degli altri protocolli URI, ad es

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

Se non hai ancora fortuna, prova a cambiare la regola di riscrittura per includere la tua sottocartella. Questo è spesso un problema se stai utilizzando un URL temporaneo su un server di sviluppo, ecc:

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

Basta giocare con queste opzioni, una dovrebbe funzionare. Inoltre, assicurati che il tuo file indice sia impostato su:

$config['index_page'] = '';

In bocca al lupo!


Pensavo che il tuo primo codice qui fosse la soluzione per me, ma in realtà sta solo inviando qualsiasi URL come dominio / * a dominio / index.php non sta inviando dominio / benvenuto al controller di benvenuto. fu eccitato per un secondo allora. provando ora gli altri suggerimenti.
— jsky

31

Avere il file.htaccess nella directory principale dell'applicazione, insieme al file index.php. (Controlla se l'estensione htaccess è corretta, Bz htaccess.txt non ha funzionato per me.)

E aggiungi le seguenti regole al file .htaccess,

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

Quindi trova la seguente riga nel tuo file application / config / config.php

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

Imposta la variabile vuota come di seguito.

$config['index_page'] = '';

Ecco, ha funzionato per me.

Se non funziona ulteriormente prova a sostituire la seguente variabile con questi parametri ('AUTO', 'PATH_INFO', 'QUERY_STRING', 'REQUEST_URI' e 'ORIG_PATH_INFO') uno per uno

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

3
grazie, ho fallito in questo per molto tempo, non so perché, ma il tuo modo ha funzionato come il burro: D
— Ahmed Samy

1
Grazie MDeSilva. Questo post mi fa risparmiare tempo.
— sanji

1
Grazie. Le sue opere. BTW, non ho bisogno di cambiare config.php.
— Stony

1
Grazie, questo mi ha aiutato, ho usato PATH_INFO con WAMP
— T.Coutlakis

21

Dai un'occhiata al system\application\config\config.phpfile, c'è una variabile chiamataindex_page

Dovrebbe sembrare come questo

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

cambiarlo in

$config['index_page'] = "";

Quindi, come accennato, devi anche aggiungere una regola di riscrittura al .htaccessfile

Nota: in CodeIgniter v2 questo file è stato spostato fuori dalla cartella di sistema in application\config\config.php


9

Tutti i metodi sopra indicati non sono riusciti per me e quindi ho scoperto che non stavo cambiando AllowOverride None in AllowOverride All nel mio file host virtuale in / 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>

     ...


Grazie mille, ho anche AllowOverride None, ora funziona!
— Willy

Il blog ora non c'è più e mi sarebbe piaciuto leggerlo. Nessuna di queste soluzioni funziona per me ...
— Kevin Beal,

fantastico, mi ha salvato la giornata.
— JChow

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

dopo aver cambiato RewriteRule. * index.php / $ 0 [PT, L] con il nome della cartella del progetto "codeigniter". per me funziona. Grazie ragazzi per il vostro supporto.


6

Passaggio 1 => Posiziona il tuo file .htaccess nella cartella principale dove esistono le cartelle dell'applicazione e di sistema.

Passaggio 2 => Se il tuo percorso web utilizza una sottocartella come - yourdomain.com/project/ - utilizza il seguente codice nel file htaccess

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

Se il tuo percorso web utilizza la cartella principale come - tuodominio.com - utilizza il seguente codice nel file htaccess

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

Ho provato a utilizzare il primo degli esempi precedenti funziona solo sulla mia radice ma non sui caricamenti del modulo, ecc.Proverò comunque a utilizzare index.php negli URL che giocherò e tornerò su questo se riesco a farlo uscire
— Sam

Grazie @ Vinod, stavo impazzendo per questo problema, ho cercato in rete per così tanto tempo, ho provato varie soluzioni ma non hanno mai funzionato fino a quando non ho trovato la tua soluzione.Ora il mio progetto CI funziona e mi ha dato NUOVA SPERANZA per andare avanti con CI, grazie mille :)
— gomesh munda

5

Ho solo pensato di poter aggiungere

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

sarebbe il .htaccess e assicurati di modificare la tua variabile application / config.php nel modo seguente:

sostituire

$config['uri_protocol'] = “AUTO” 

con

$config['uri_protocol'] = “REQUEST_URI”

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

Deve sicuramente funzionare .. provalo


4

Assicurati di aver abilitato mod_rewrite(io no).
Abilitare:

sudo a2enmod rewrite  

Inoltre, sostituisci AllowOverride NoneconAllowOverride All

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

Finaly ...

sudo /etc/init.d/apache2 restart  

Il mio .htaccess è

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

Un altro modulo avevo bisogno di abilitare era actions: stackoverflow.com/questions/14419757/...
— Jasdeep Khalsa

4

Soluzione perfetta [testata su localhost e su dominio reale]

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

3

Questo è un .htaccess per uno dei miei progetti CI:

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

L'ultima riga dovrebbe darti ciò di cui hai bisogno, anche se potresti o meno aver bisogno di '/ projectFolder' a seconda di come è impostata la struttura delle cartelle. In bocca al lupo!



3

Come file .htaccess, una buona opzione è usare quello fornito da 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]

È un .htaccess ben congegnato che funziona.


3

Esistono due modi per risolvere index.php nel percorso dell'URL per codeigniter

1: In config / config.php Cambia codice:

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

per

$config['index_page'] = '';

2: Crea .htacess nel percorso root se non creato, copia il seguente codice: -

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

Salvalo e quindi controlla la configurazione di Apache rewrite_module OPPURE mod_rewrite è abilitato, altrimenti abilitato. (Miglior approccio)!


Questo è corretto e direttamente dalla documentazione di CodeIgniter. Uso anche questo metodo.
— Dewald Els

2

l'ho testato su apache2 su molti hosting diversi e funziona benissimo.

usa questo htaccess

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

assicurati di avere enabled mod_rewirtecon un filephpinfo();

quindi fallo in 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';

se non funziona ancora, prova a cambiare il file $config['uri_protocol']='AUTO'in uno dei application/config/config.phpfile interni elencati nella riga 40/54:

a volte ho usato: REQUEST_URIinvece di AUTOo "QUERY_STRING"per gli host di goDaddy


2

Guarda nel \application\config\config.phpfile, c'è una variabile chiamataindex_page

Dovrebbe sembrare come questo

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

cambiarlo in

$config['index_page'] = "";

Quindi, come accennato, devi anche aggiungere una regola di riscrittura al .htaccessfile in questo modo:

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

Funziona per me, spero anche tu.


2

Se sei su Linux e utilizzi il server apache2, potrebbe essere necessario sovrascrivere il file apache2.conf anche accanto alle modifiche sul file .htaccess. Trova il file di configurazione di apache2 su /etc/apache2/apache2.conf .

Directory di ricerca / var / www / Change AllowOverride None -> AllowOverride All

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory

1

posizionare un file .htaccess nella directory web principale

Qualunque modifica tu faccia - se quanto sopra non viene rispettato - non funzionerà. Di solito si trova nella cartella System, dovrebbe essere nella root. Saluti!


2
Dopo aver trascorso un paio d'ore, ho letto questo e ho trovato il mio errore.
— mohsin.mr

Ho anche passato almeno un'ora a causa di questo "piccolo" trucco. Per impostazione predefinita, i file .htaccess si trovano nella applicationdirectory anziché nella root.
— vadim

1

Ho provato molte soluzioni ma quella che mi è venuta è questa:

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]

In questo modo rimuoverò index.php dall'URL come richiesto.



0

Questo ti aiuterà a incollare questo codice nella cartella dell'applicazione nel file .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

Questo mi ha fatto la magia completa:

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]

Spero che sia d'aiuto!


0

Ciao Questo mi ha funzionato

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

oltre a questo

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

dove la cartella è il nome della sottocartella se questa applicazione codeigniter è ospitata come sottodominio, ad esempio nome dominio / cartella / index.php.

Spero che funzioni per te. Grazie.


0

Copia il codice seguente nel tuo .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]

Sebbene questo codice possa rispondere alla domanda, fornire un contesto aggiuntivo sul perché e / o come questo codice risponde alla domanda ne migliora il valore a lungo termine.
— 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

Passo 1 :

Aggiungilo nel file htaccess

<IfModule mod_rewrite.c> 
RewriteEngine On 
#RewriteBase / 

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

Passo 2 :

Rimuovere index.php in codeigniter config

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

Passaggio 3:

Consenti l'override di htaccess nella configurazione di Apache (comando)

sudo nano /etc/apache2/apache2.conf e modifica il file e passa a

AllowOverride All

per la cartella www

Passaggio 4:

Riscrittura mod apache abilitata (comando)

sudo a2enmod riscrivere

Passaggio 5:

Riavvia Apache (comando)

sudo /etc/init.d/apache2 restart
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.