Codeigniter - Quitar el index.php

 
Vista:
Imágen de perfil de Pablo Dante
Val: 16
Ha mantenido su posición en Codeigniter (en relación al último mes)
Gráfica de Codeigniter

Quitar el index.php

Publicado por Pablo Dante (6 intervenciones) el 03/10/2016 13:44:47
Hola foro, buen día.
Estoy intentando quitar el index.php de las URLs para que sean más amigables.
El tema es que intenté todo el material que hay en internet para poder hacerlo y nada me ha resultado efectivo.
Estoy utilizando CodeIgniter 2.1.4 y el 3.1.0 con PHP 5.2 y MySQL.
He modificado desde el CodeIgniter los archivos conf.php, route.php, etc y en el Apache también pero el resultado es el mismo estoy obligado a poner "index.php" antes de llamar a los controladores de mis script sino no me muestra un error. Que normalmente es :

Not Found

The requested URL /aplicacion_ci/index.php was not found on this server.

Si alguien puede darme una mano con esto solos voy a agradecer.
Un saludos cordial.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de kip
Val: 53
Oro
Ha mantenido su posición en Codeigniter (en relación al último mes)
Gráfica de Codeigniter

Quitar el index.php

Publicado por kip (21 intervenciones) el 03/10/2016 18:44:38
Hola, en la documentacion de Codeigniter te indican como hacerlo, haciendo uso del archivo .htaccess, dentro de este debes colocar las siguientes lineas:

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

DOC: https://www.codeigniter.com/userguide3/general/urls.html

Ten en cuenta que debes tener activado el mod_rewrite en tu servidor Apache, ademas de eso debes en el archivo config.php cambiar esta linea:

1
$config['index_page'] = "";


Dejandola asi, sin valor.

Nos cuentas si pudiste solucionarlo o si tienes alguna duda.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Pablo Dante
Val: 16
Ha mantenido su posición en Codeigniter (en relación al último mes)
Gráfica de Codeigniter

Quitar el index.php

Publicado por Pablo Dante (6 intervenciones) el 04/10/2016 13:59:18
Hola buen día.
Primero, gracias por la ayuda.
Segundo, todo lo que me indica lo hice tal cual se desarrolla en los tutoriales inclusive lo que se explaya en el sitio oficial de CodeIgniter.
Pero no pude hacerlo funcionar de ningún modo.... !?

Le comento en el ambiente en que estoy haciendo pruebas con Codeigniter 2.1.4 y 3.1.0.
Los ejercicios los corro de forma local con EasyPHP 2.0.0 que tiene PHP 5.2, Apache 2.2.3 y como es la primera vez que uso un framework
y como se describe en varios sitios que es muy fácil de instalar y usar. Bueno decidía probar pero me encontré que no es tan "sencillo" todo ni tan "fácil" como se describe.

Igual la cosa no termina acá, pude hacer, o se logre, hace que el "index.php" se mapeara para que en la URL no haga falta ponerlo y acceder a cada controlador de forma amigable. Entonces hice los siguiente (después de probar todas las posibilidades):
1) el .htaccess lo definí de la siguiente forma...

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

2) En el archivo config.php cambie lo siguiente...

$config['base_url'] = 'http://127.0.0.1:81/proyectoci214/';
$config['index_page'] = '';

3) En el archivo de mi Apache (httpd.conf), descomente la siguiente línea...

LoadModule rewrite_module modules/mod_rewrite.so
... y definí lo siguiente...
<Directory />
AllowOverride All
</Directory>

... y NO lograba nada la URL seguí siendo "sucia" como le puse yo... entonces se me ocurrió hacer lo siguiente en el archivo de Codeigniter "config.php" :

Cambie el valor de:
$config['uri_protocol'] = 'REQUEST_URI';
Por este otro:
$config['uri_protocol'] = 'AUTO'; (valor inicial por defecto)

Y aunque parezca mentira la cosa se soluciono...
Y, me que da mi URL de la siguiente forma "http://127.0.0.1:81/proyectoci214/alumnos_control/lstalumnos" ya presindo del "index.php" para acceder a otros controladores.
Y aunque en varios sitios recomiendan utilizar el valor "REQUEST_URI" yo tube que dejar el valor que trae inicialmente por defecto.
Espero que mi experiencia le sirva a alguien, porque después de hacer varias pruebas y definiendo de varias formas los archivos mencionados, me queda la duda que es lo que realmente hice para quitar el famoso "index.php" y hacer URLs amigables, como dicen.
Un saludos cordial
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 5
Ha aumentado su posición en 2 puestos en Codeigniter (en relación al último mes)
Gráfica de Codeigniter

Quitar el index.php

Publicado por DAVID (1 intervención) el 13/10/2016 08:33:37
Hola buenos días,
yo lo tengo así:
1
$config['uri_protocol']	= 'REQUEST_URI';
y en archivo .htaccess asi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
RewriteEngine On
    RewriteBase /ivti_cg_web/
 
 
    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]
 
    RewriteCond %{REQUEST_URI} ^application.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]
 
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [L]
    RewriteCond $1 !^(index\.php|img|js|css|js|favicon\.ico)

Y me funciona perfectamente sin index.php en las url's.

Prueba a ver si así te funciona.

Un saludo,
David
Madrid, diseño gráfico
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Pablo Dante
Val: 16
Ha mantenido su posición en Codeigniter (en relación al último mes)
Gráfica de Codeigniter

Quitar el index.php

Publicado por Pablo Dante (6 intervenciones) el 13/10/2016 14:07:59
Hola David, buen día.
Ese código que posteas también lo utilicé pero sin tener el resultado esperado.
En pocas palabras solucioné el problema actualizando la versión de PHP para poder hacer las prácticas o reproducir ejemplos en CodeIgniter.
Por otro lado estaba utilizando un EasyPHP desactualizado y eso también influye en el funcionamiento del framework desde la versión 2.1.4 en adelante.
Ahora lo que estoy haciendo es utilizar el CodeIgniter 3.1.0 con la versión del EasyPHP 6.0 DEV ... vamos a ver que pasa...
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Pablo Dante
Val: 16
Ha mantenido su posición en Codeigniter (en relación al último mes)
Gráfica de Codeigniter

Quitar el index.php

Publicado por Pablo Dante (6 intervenciones) el 14/10/2016 13:53:36
Hola kip, buen día.

Bien te comento mi experiencia con CodeIgniter 2.1.4 y 3.1.0

Una de los problemas que tuve es con una rutina del CI 3.1 que se soluciona actualizando mi EasyPHP. Estaba trabajando con una versión muy des-actualizada. Esto provocaba una llamada indefinida a la función "memory_get_usage();". Entonces ví que se podía reolver de dos formas.
La primera es metiendo mano en el "system/core/Output.php" en la línea que indica el Error, en mi caso la número 446 dpnde solo hay que cambiar la lógica del código.
O sea originalmente el framework para la versión 3.1.0 evalua lo siguiente lo siguiente:

if ($this->parse_exec_vars === TRUE){
$memory = round(memory_get_usage() / 1024 / 1024, 2).'MB';
$output = str_replace(array('{elapsed_time}', '{memory_usage}'), array($elapsed, $memory), $output);
}
Y en este caso reemplace el "if" anterior por:
if ($this->parse_exec_vars === TRUE){
$memory = ( ! function_exists('memory_get_usage')) ? '0' : round(memory_get_usage()/1024/1024, 2).'MB';

$output = str_replace('{elapsed_time}', $elapsed, $output);
$output = str_replace('{memory_usage}', $memory, $output);
}
Increíblemente el Error desaparece después de refrescar la aplicación.
Pero me pareció medo "chancho" tocar los script del CI que trae originalmente, no es correcto.
Se supone que sin modificar nada podés disponer de las virtudes del framework sin meter mano, y hacer uso de su potencial.
Esto por un lado; aclaro que con la versión 2.1.4 no pasa lo mismo osea que según el tutorial (siguiéndolo al pie de la letra), la vista "welcome" se muestra sin problemas. Espero ser claro en mi explicación.
Cómo solucione el problema incial, facil, actualicé el EasyPHP a la versión 6.0 DEV y listo todo arreglado. Es una cuestión de upgrade de las versiones de PHP, Apache, MySQL "y esas yerbas".

El otro problema es con el famoso "index.php", que aún actualizando el EasyPHP no logro quitar. y el problema radica no en el Apache 8donde habilitamos el mod_rewrite); ni en el "conf.php" (donde modificamos "$config['index_page']") de CodeIgniter sino en el archivo ".htaccess" que por cierto lo tengo al nivel del proyecto. Al parecer ni lo toma en cuenta. O sea cambié e intenté toda las formas que en la mayoría de los tutoriales se explica para quitar el script mensionado, pero sin tener el resultado esperado.
Es decir que no puedo solucionar el problema, digo no puedo prescindir del "index.php" cuando llamo a otras vistas desde diferentes controladores. Y la verdad no sé como resolverlo.

Aplique todas las variantes posibles en el archivo en cuestión sin lograr que la siguiente URL ...
http://localhost:88/proyectoci214/index.php/contacto_control/contacto
Pase a ser ...
http://localhost:88/proyectoci214/contacto_control/contacto
en mi proyecto.

1) el .htaccess lo definí de la siguiente forma...

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

2) En el archivo config.php cambie lo siguiente...

$config['base_url'] = 'http://127.0.0.1:81/proyectoci214/';
$config['index_page'] = '';

3) En el archivo de mi Apache (httpd.conf), descomente la siguiente línea...
LoadModule rewrite_module modules/mod_rewrite.so

... y cambie en el TAG Directory solo como se muestra a continuación ...

<Directory />
AllowOverride All
</Directory>

Y Cambiar el valor de:
$config['uri_protocol'] = 'REQUEST_URI';
Por este otro:
$config['uri_protocol'] = 'AUTO'; (valor inicial por defecto)

No hace ninguna diferencia.

Agradecería si hay otra forma de configurar o modificar algo más que me está olvidando pero es lo que indican la mayoría de los tutoriales. NO sé que más tocar ... !!! :P
Gracias por responderme pero como último intento voy a probar lo que me indica David más abajo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip
Val: 53
Oro
Ha mantenido su posición en Codeigniter (en relación al último mes)
Gráfica de Codeigniter

Quitar el index.php

Publicado por kip (21 intervenciones) el 15/10/2016 07:09:58
Hola, verificaste realmente que tengas activado el mod_rewrite usando phpinfo() ?

Puedes probar aquello del mod_rewrite usando una funcion de PHP tambien, esta te trae un array con los modulos activados de Apache:

1
<?php echo in_array('mod_rewrite', apache_get_modules()) ? 'ACTIVADO MOD REWRITE' : 'NO ACTIVADO MOD REWRITE'; ?>

Ejecuta el codigo anterior y verifica.

Si con lo anterior verificas que tienes activado el modulo, intenta cambiar el .htaccess de esta forma:

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

Recuerda que el archivo .htaccess debe ir en el path principal, es decir fuera de cualquier carpeta del framework, en el mismo path donde se encuentran estas pero no dentro de ninguna.

Ademas de eso la variable $config['base_url'] te recomiendo definirla de esta forma:

1
2
3
$root = "http://".$_SERVER['HTTP_HOST'];
$root .= dirname($_SERVER['SCRIPT_NAME']);
$config['base_url'] = $root;

Nos comentas luego de probar lo que te he dejado arriba y a ver si funciona o no!

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Pablo Dante
Val: 16
Ha mantenido su posición en Codeigniter (en relación al último mes)
Gráfica de Codeigniter

Quitar el index.php

Publicado por Pablo Dante (6 intervenciones) el 17/10/2016 12:41:33
Hola kip buen día.
Bien seguí al pie de la letra tu ayuda y sigo con el mismo problema.
O sea tengo Activado el mod_rewrite, cambié el ".htaccess" como me indicaste y lo mismo para "base_url". Todo tal cual lo describís .
Pero sigo con el mismo problema cuando quiero accede a otra vista desde la página principal tengo que agregar a mano el "index.php":

Tengo lo siguiente: http://127.0.0.1:88/proyectoci214/contacto_control/contacto (me tendría que mostrar el formulario de contacto)
Pero me dice:
¡Objeto no encontrado!

El enlace requerido no ha sido localizado en este servidor. El enlace en la página referente parece tener algun error o ha expirado. Por favor comunique al autor de la página el error.

Por favor contacte con el webmaster en caso de que usted crea que existe un error en el servidor.

Error 404

127.0.0.1
10/17/16 07:37:55
Apache/2.2.13 (Win32) PHP/6.0.0-dev

Pero si cambio a: http://127.0.0.1:88/proyectoci214/index.php/contacto_control/contacto
Me muestra la vista correctamente.
La verdad no sé que pueda ser....
NO sé que otro archivo o variable tocar para lograr el efecto deseado.
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Pablo Dante
Val: 16
Ha mantenido su posición en Codeigniter (en relación al último mes)
Gráfica de Codeigniter

Quitar el index.php

Publicado por Pablo Dante (6 intervenciones) el 17/10/2016 16:37:09
Hola kip (again)
Bueno logré quitar o mejor dicho prescindir del "index.php" en el CodeIgniter 2.1.4.
Que hice...
Instale el EasyPHP 6.0 DEV que incluye el PHP 7 + Apache + MySQL es el más actual.
Seguí todo los pasos de cada tutoría de todos los que hay en la gran RED pero no lograba el efecto deseado: URLs amigables.
Bien después seguí tus consejos de configuración y tampoco pude resolver el problemas.
Y descubrí que hay una parte del httpd.conf del Apache que hay que cambiarle el valor (ver línea resaltada)...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<Directory "C:/PROGRA~1/EASYPH~1.1/www">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.2/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks
 
    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride All (Estaba en None)
 
    #
    # Controls who can get stuff from this server.
    #
    Order allow,deny
    Allow from all
</Directory>


Y con este cambio el "index.php" no es más requerido en la URL de mi Proyecto...
- Pero oh sorpresa!!!!
El PHPMyAdmin dejó de funcionar y como mi Proyecto requiere de conexión a una BD en el MySQL tuve que decidir, (por que no quería perder el tiempo en buscar el problema), deshinstalar el EasyPHP 6.0.
Y decidí instalar una versión anterior el EasyPHP 5.3.6.1; y; para mí sorpresa esta versión trae configurados varios valores por defecto:
En el httpd.conf del Apache:

- El "mod_rewrite" biene descomentado o sea siempres está ACTIVADO.
- En los tag Directory el "AllowOverride" tiene setado el valor "All" por defecto al igual que el tag <Directory "C:/PROGRA~1/EASYPH~1.1/www">.

Esto por un lado.
Por otro lado, en el CodeIgniter los valores para el archivo de configuración son los mismos que describís o los que se describen en los diferentes tutoriales. Salvo el valor de "$config['uri_protocol'] = 'AUTO';" yo lo deje así y no trajo inconvenientes.
Y el archivo .htaccess los definí de esta forma:
1
2
3
RewriteEngine on
RewriteCond $1 !^(index.php|css|js|images|user_guide|robots.txt)
RewriteRule ^(.*)$ index.php/$1 [L]
... y no tuve complicaciones o sea que el Apache respeta estas definiciones en él.

Que me resta por ver ahora...
La misma versión del EasyPHP que tengo instalada pero con un proyecto utilizando el CodeIgniter 3.0 y ver si el comportamiento es el mismo si sufrir cambios o instalar versiones diferentes del EasyPHP.

Entonces para resumir mi ambiente actual es:
- CodeIgniter 2.1.4
- EasyPHP 5.3.6.1 para Windows 7
- Hostname: 127.0.0.1 Port: 8080

Espero sirva mi experiencia, voy a hacer pruebas más exhaustivas al respecto como por ejemplo INSERT y UPDATE en la BD. Y voy a ir comentando como funcionan.
Pero resumiendo creo que este tipo de "manoseo" en los archivos de configuración en los Host locales (cualquiera fuere) que la mayoría de los desarrolladores/programadores utilizan; no se debería modificar por cada Framework que se utilice. Creo que no es correcto, como es el caso de CodeIgniter ya debería estás configurado y estandarizado el uso de URL amigables sin que se deba tocar o cambiar valores dentro de los archivos de configuración, salvo que sea necesario. Esto es una crítica personal, cada uno que evalúe en el uso y conveniencia para sus desarrollos. O sea no se puede perder el tiempo en configurar algo que debería venir ya de antemano resuelto.
Es mi apreciación hoy ... no sé más adelante cuando haga más robusto mi proyecto.
... sigo investigando...
Un saludo cordial
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Quitar el index.php

Publicado por hector (1 intervención) el 06/02/2019 22:42:40
Exactamente el archivo .htaccess debe de ir afuera de todas las carpetas del framework tiene que estar al mismo nivel que la carpeta applications para que les funcion y cambiar el archivo .htaccess con lo anterior mensionado en el foro y quitar en el archivo config el index.php y con eso funciona de maravilla
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar