Cómo eliminar "index.php" en la ruta de codeigniter

Respuestas:

90

Si está utilizando Apache, coloque un archivo .htaccess en su directorio web raíz que contenga lo siguiente:

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

Otra buena versión se encuentra aquí:

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

Sean Vieira
fuente
2
+1 para el enlace! Aunque tuve que modificar un poco. lo tengo con esto -> RewriteCond% {REQUEST_FILENAME}! -f RewriteCond% {REQUEST_FILENAME}! -d RewriteRule ^ (. *) $ index.php / $ 1 [QSA, L]
OrangeRind
por alguna razón, tuve que agregar una barra al comienzo de RewriteCond. RewriteCond $1 !^\/(index\.php|assets|robots\.txt)
Henry
Por alguna razón, si tiene index.php en la URL, en realidad no se elimina, permanece allí y sigue funcionando.
CMCDragonkai
1
Usé todas las combinaciones posibles y todavía no me funciona !!!!! ¿¿Como hiciste que funcionara??
Roshdy
Su instalación de Apache debe configurarse para verificar los archivos .htaccess; asegúrese de que ese sea el caso.
Sean Vieira
60

Tuve algunos problemas importantes al eliminar index.php. Como regla general, el .htaccess a continuación se ha probado en varios servidores y generalmente funciona:

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

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

Si no tiene suerte con eso, el siguiente paso es ajustar su archivo de configuración. Pruebe algunos de los otros protocolos URI, por ejemplo

| '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 aún no tiene suerte, intente cambiar la regla de reescritura para incluir su subcarpeta. Esto suele ser un problema si usa una URL temporal en un servidor de desarrollo, etc.

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

Simplemente juegue con estas opciones, una debería funcionar. Además, asegúrese de que su archivo de índice esté configurado en:

$config['index_page'] = '';

¡Buena suerte!

jimbo2087
fuente
Pensé que su primer código aquí era la solución para mí, pero en realidad solo está enviando una URL como dominio / * a dominio / index.php, no está enviando dominio / bienvenida al controlador de bienvenida. estaba emocionado por un segundo entonces. probando las otras sugerencias ahora.
jsky
31

Tenga el archivo .htaccess en el directorio raíz de la aplicación, junto con el archivo index.php. (Verifique si la extensión htaccess es correcta, Bz htaccess.txt no funcionó para mí).

Y agregue las siguientes reglas al archivo .htaccess,

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

Luego busque la siguiente línea en su archivo application / config / config.php

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

Establezca la variable vacía como se muestra a continuación.

$config['index_page'] = '';

Eso es todo, funcionó para mí.

Si no funciona, intente reemplazar la siguiente variable con estos parámetros ('AUTO', 'PATH_INFO', 'QUERY_STRING', 'REQUEST_URI' y 'ORIG_PATH_INFO') uno por uno

$config['uri_protocol'] = 'AUTO';
Shaolin
fuente
3
gracias, he estado fallando en esto durante mucho tiempo, no sé por qué, pero tu forma funcionó como la mantequilla: D
Ahmed Samy
1
Gracias MDeSilva. Esta publicación me ahorra tiempo.
Sanji
1
Gracias. Funciona. Por cierto, no necesito cambiar config.php.
Stony
1
Gracias, este me ayudó, usé PATH_INFO con WAMP
T.Coutlakis
21

Eche un vistazo al system\application\config\config.phparchivo, hay una variable llamadaindex_page

Debe tener un aspecto como este

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

cámbialo a

$config['index_page'] = "";

Luego, como se mencionó, también debe agregar una regla de reescritura al .htaccessarchivo

Nota: en CodeIgniter v2, este archivo se movió fuera de la carpeta del sistema a application\config\config.php

Re0sless
fuente
9

Todos los métodos anteriores fallaron para mí y luego descubrí que no estaba cambiando AllowOverride None a AllowOverride All en mi archivo de host virtual en / 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>

     ...

waqas
fuente
Muchas gracias, obtuve AllowOverride None también, ¡ahora funciona!
Willy
El blog ya no existe y me hubiera gustado mucho leerlo. Ninguna de estas soluciones me funciona ...
Kevin Beal
impresionante, me salvó el día.
JChow
6
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /codeigniter/index.php/$0 [PT,L]

después de cambiar RewriteRule. * index.php / $ 0 [PT, L] con el nombre de la carpeta del proyecto "codeigniter". Funciona para mí. Gracias chicos por su apoyo.

Capitán Gorrión
fuente
6

Paso 1 => Coloque su archivo .htaccess en la carpeta raíz donde existen las carpetas de la aplicación y del sistema.

Paso 2 => Si su ruta web usa una subcarpeta como - sudominio.com/proyecto/ - entonces use el siguiente código en el archivo htaccess

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

Si su ruta web usa una carpeta raíz como sudominio.com, use el siguiente código en el archivo htaccess

RewriteEngine on
RewriteBase    /
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
vinod
fuente
Intenté usar el primero de los ejemplos anteriores que solo funciona en mi raíz, pero no en cargas de formularios, etc. Intentaré usar index.php en las URL. Jugaré y volveré a esto si puedo confirmarlo
Sam
Gracias @ Vinod.Me estaba volviendo loco con este problema.He estado buscando en la red durante tanto tiempo, probé varias soluciones pero nunca funcionaron hasta que encontré tu solución.Ahora mi proyecto de CI está funcionando y me ha dado NUEVA ESPERANZA para seguir adelante con CI. Muchas gracias :)
gomesh munda
5

Solo pensé que podría agregar

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

sería el .htaccess y asegúrese de editar su variable application / config.php de la siguiente manera:

reemplazar

$config['uri_protocol'] = AUTO 

con

$config['uri_protocol'] = REQUEST_URI
Jefkine Kafunah
fuente
5
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L] 

Esto definitivamente debe funcionar ... inténtalo

Ramaraju.d
fuente
4

Asegúrese de haber habilitado mod_rewrite(yo no lo había hecho).
Para permitir:

sudo a2enmod rewrite  

Además, reemplace AllowOverride NoneporAllowOverride All

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

Finalmente ...

sudo /etc/init.d/apache2 restart  

Mi .htaccess es

RewriteEngine on  
RewriteCond $1 !^(index\.php|[assets/css/js/img]|robots\.txt)  
RewriteRule ^(.*)$ index.php/$1 [L]  
miguelitomp
fuente
Otro módulo que necesitaba habilitar era actions: stackoverflow.com/questions/14419757/…
Jasdeep Khalsa
4

Solución perfecta [probada tanto en localhost como en dominio real]

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

Este es un .htaccess para uno de mis proyectos de CI:

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

La última línea debería darle lo que necesita, aunque puede que necesite o no '/ projectFolder' dependiendo de cómo esté configurada la estructura de su carpeta. ¡Buena suerte!

Matthew Rapati
fuente
3

Como archivo .htaccess, una buena opción es utilizar el proporcionado por 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]

Es un .htaccess bien pensado que simplemente funciona.

Laurent
fuente
3

Hay dos formas de resolver index.php en la ruta de la URL para codeigniter

1: En config / config.php Cambiar código:

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

a

$config['index_page'] = '';

2: Cree .htacess en la ruta raíz si no se creó, copie el siguiente código: -

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

Guárdelo y luego verifique su configuración de Apache rewrite_module O mod_rewrite está habilitado Si no es así, habilítelo. (Mejor enfoque)!

2 revoluciones
fuente
Esto es correcto y directamente de los documentos de CodeIgniter. También utilizo este método.
Dewald Els
2

Probé esto en apache2 en muchos alojamientos diferentes y funciona muy bien.

usa este htaccess

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

asegúrese de tener enabled mod_rewirtecon unphpinfo();

luego haz esto en 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 aún no funciona, intente cambiar $config['uri_protocol']='AUTO'a uno de los application/config/config.phparchivos internos enumerados en la línea 40/54:

a veces usé: en REQUEST_URIlugar de AUTOo "QUERY_STRING"para hospedajes de goDaddy

soy yo
fuente
2

Mire en el \application\config\config.phparchivo, hay una variable llamadaindex_page

Debe tener un aspecto como este

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

cámbialo a

$config['index_page'] = "";

Luego, como se mencionó, también debe agregar una regla de reescritura al .htaccessarchivo de esta manera:

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

Funciona para mí, espero que tú también.

planeador
fuente
2

Si está en Linux y usa el servidor apache2, es posible que debamos anular el archivo apache2.conf también junto a los cambios en el archivo .htaccess. Busque el archivo de configuración de apache2 en /etc/apache2/apache2.conf .

Buscar directorio / var / www / Cambiar AllowOverride Ninguno -> AllowOverride All

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

coloque un archivo .htaccess en su directorio web raíz

Cualquier ajuste que hagas, si no se cumple lo anterior, no funcionará. Por lo general, está en la carpeta Sistema, debería estar en la raíz. ¡Salud!

foxybagga
fuente
2
Después de pasar un par de horas, leí esto y encontré mi error.
mohsin.mr
También pasé al menos una hora debido a este "pequeño" truco. De forma predeterminada, los archivos .htaccess vienen en el applicationdirectorio en lugar de en la raíz.
vadim
1

He probado muchas soluciones, pero la que se me ocurrió es esta:

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]

Esto eliminará el index.php de la URL según sea necesario.

codegeek
fuente
0

Esto le ayudará a pegar este código en la carpeta de la aplicación en el archivo .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>
Majid
fuente
0

Este me hizo 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]

¡Espero eso ayude!

bmnepali
fuente
0

Hola este me funciono

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

tan bien como esto

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

donde la carpeta es el nombre de la subcarpeta si esta aplicación de codeigniter está alojada como un subdominio, por ejemplo, nombre de dominio / carpeta / index.php.

Espero que eso te funcione. Gracias.

encender
fuente
0

Copie el código siguiente pasado en su .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]
dev87
fuente
Si bien este código puede responder la pregunta, proporcionar un contexto adicional sobre por qué y / o cómo este código responde a la pregunta mejora su valor a largo plazo.
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>
mohd jagir
fuente
0

Paso 1 :

Agregue esto en el archivo htaccess

<IfModule mod_rewrite.c> 
RewriteEngine On 
#RewriteBase / 

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

Paso 2 :

Eliminar index.php en la configuración de codeigniter

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

Paso 3 :

Permitir anular htaccess en la configuración de Apache (comando)

sudo nano /etc/apache2/apache2.conf y edite el archivo y cambie a

AllowOverride All

para carpeta www

Paso 4 :

Habilitado la reescritura de mod de apache (comando)

sudo a2enmod reescribir

Paso 5:

Reiniciar Apache (comando)

sudo /etc/init.d/apache2 restart
Shashank Saxena
fuente