Come rimuovo la "index.php"
sporgenza in ogni percorso in codeigniter da qualche parte nel centro? Voglio pulito non index.php-fied URLs
?
Come rimuovo la "index.php"
sporgenza in ogni percorso in codeigniter da qualche parte nel centro? Voglio pulito non index.php-fied URLs
?
Risposte:
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:
RewriteCond $1 !^\/(index\.php|assets|robots\.txt)
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!
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';
Dai un'occhiata al system\application\config\config.php
file, 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 .htaccess
file
Nota: in CodeIgniter v2 questo file è stato spostato fuori dalla cartella di sistema in application\config\config.php
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>
...
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.
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 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”
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]
Deve sicuramente funzionare .. provalo
Assicurati di aver abilitato mod_rewrite
(io no).
Abilitare:
sudo a2enmod rewrite
Inoltre, sostituisci AllowOverride None
conAllowOverride 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]
actions
: stackoverflow.com/questions/14419757/...
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]
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!
Utilizzare mod_rewrite
come indicato in questo tutorial dal wiki CI.
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.
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)!
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_rewirte
con 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.php
file interni elencati nella riga 40/54:
a volte ho usato: REQUEST_URI
invece di AUTO
o "QUERY_STRING"
per gli host di goDaddy
Guarda nel \application\config\config.php
file, 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 .htaccess
file 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.
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
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!
application
directory anziché nella root.
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.
Uso queste righe nel .htaccess
file; che inserisco nella cartella principale
RewriteEngine on
RewriteRule ^(application|system|\.svn) index.php/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [QSA,L]
Quindi posso accedere a http://example.com/controller/function/parameter
invece di http://example.com/index.php/controller/function/parameter
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>
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!
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.
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]
<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>
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