Desarrollo de Software

Eliminar index.php de la URL con CodeIgniter

Por defecto, las URLs de CodeIgniter muestran un «index.php». En el ejemplo de la imagen puede verse en la URL (http://localhost/cursoci/index.php/welcome) y no queda muy agradable a la vista. Sería mejor una URL del tipo http://localhost/cursoci/welcome, que además ayudaría al SEO de la página. Por eso hay que eliminar index.php de las URLs.

Eliminar index.php en CI

Para cambiar esto hay que hacer dos modificaciones. Como mencionamos la semana pasada revisando los ficheros de configuración, hay una variable en config.php que por defecto viene así

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

que habría que modificar a

$config['index_page'] = '';

Además, debes modificar el fichero .htaccess para realizar las redirecciones 301 y que funcione correctamente al eliminar index.php. El fichero .htaccess debes guardarlo en donde tengas guardado tu fichero index.php, el controlador frontal que ya vimos al revisar los ficheros instalados en CodeIgniter.

Según la ayuda de CodeIgniter, este sería el fichero .htaccess a utilizar y es el que yo uso:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
 
    #Removes access to the system folder by users.
    #Additionally this will allow you to create a System.php controller,
    #previously this would not have been possible.
    #'system' can be replaced if you have renamed your system folder.
    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]
 
    #When your application folder isn't in the system folder
    #This snippet prevents user access to the application folder
    #Submitted by: Fabdrol
    #Rename 'application' to your applications folder name.
    RewriteCond %{REQUEST_URI} ^application.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]
 
    #Checks to see if the user is attempting to access a valid file,
    #such as an image or css document, if this isn't true it sends the
    #request to index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>
 
<IfModule !mod_rewrite.c>
    # If we don't have mod_rewrite installed, all 404's
    # can be sent to index.php, and everything works as normal.
    # Submitted by: ElliotHaughin
 
    ErrorDocument 404 /index.php
</IfModule>

Con estos 2 cambios ya tendrías corregida la URL de tus aplicaciones.

13 comentarios en “Eliminar index.php de la URL con CodeIgniter

  1. Un poco mas corto el contenido en el .htaccess

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

    tutorial completo:
    desarrollolibre.net/blog/tema/2/codeigniter/quitar-el-indexphp-de-la-url-en-codeigniter

  2. no me queda claro donde subir el .htaccess, podrias indicarlo en forma detallada? no entiendo cual es el index del que hablas porque mi controlador por defecto es:

    $route[‘default_controller’] = «inicial»;

    gracias!

  3. perdon, encontre el archivo index.php en el root, (no tengo todo en una carpeta aparte sino todo lo quee s codeigniter directamente en el root) y alli puse el .htaaccess pero sigue sin funcionar sin la index.php en la url.
    Si coloco la index si funciona.

    Gracias.

  4. Yo tengo la siguiente estructura htdocs/codeigniter, dentro de aquí esta el
    index.php y .htaccess he probado tu codigo pero no me elimina el index.php

    • Hola whnm buen día.
      Al igual que usted yo he intentado todas las maneras de crear el .htaccess con todas las fórmulas «mágicas» que se plantean en diferentes Blogs o sitio. Y, la verdad a mí particularmente no me funcionó ninguna.
      Y, lo que puedo criticar de este framework es que no es «una interfaz simple y una lógica muy sencilla». Porque si no podés quitar algo como el «index.php» me parece que los que están vendiendo es muy trucho.
      Saludos

  5. A los que no les funciona probad a sustituir esta linea en el htaccess, la que pone RewriteRule.

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

    Donde *********** es el nombre de la carpeta del proyecto.

    • Gracias, tenia el mismo problema con los anteriores comentarios, y con tu respuesta lo solucione. Era necesario ponerle el nombre de la carpeta del proyecto.

Pon un comentario

Tu dirección de email no será publicada.

Puedes usar estas etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>