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.