> Manuales > Manual de CodeIgniter

Todas las URLs de CodeIgniter tienen un index.php que si lo deseamos podemos eliminar usando un archivo htaccess.

Lo cierto es que las direcciones de CodeIgniter son bastante amigables a buscadores, pero todavía pueden serlo más. Esto es algo que vamos a ver en este artículo de DesarrolloWeb.com.

En el artículo anterior, sobre las características de las URL de CodeIgniter, ya explicamos varias cosas que conviene saber acerca de componer direcciones para las páginas de nuestras aplicaciones PHP. Como se decía en ese artículo, todas las solicitudes a páginas de una aplicación web en CodeIgniter pasan por un archivo index.php que está en la raíz del framework. Este index.php se encarga de redirigir, o enrutar, la solicitud a través del controlador que se esté invocando (que se indica en el primer segmento después del nombre del dominio).

Así pues, por defecto las URL de CodeIgniter tienen un formato como el que sigue:

http://pruebas.com/index.php/empresas/editar/1

Pues bien, si deseamos eliminar el index.php de esta URL, para simplificar la dirección, hacerla todavía más amigable a buscadores y también más entendible por los seres humanos, podemos utilizar un archivo .htaccess.

Nota: En DesarrolloWeb.com hemos hablado en repetidas ocasiones acerca de los archivos .htaccess, explicando lo que son y cómo podemos utilizarlos para crear automáticamente URLs amigables a buscadores, sin que tengan que existir físicamente los archivos en el servidor. Recomendamos la lectura del manual Editar htaccess para crear direcciones URL amigables http://www.desarrolloweb.com/manuales/htaccess-para-urls-amigables.html para obtener una información de referencia.

Así pues, podríamos conseguir que nuestras direcciones no tuvieran siempre el mencionado index.php y quedasen con una forma similar a esta:

http://pruebas.com/empresas/editar/1

Para ello existirían diversos métodos y según nuestro dominio de los archivos .htaccess y de las expresiones regulares, así como de la configuración de Apache, podremos implementar una u otra. Nosotros en este artículo vamos a explicar un modo que está disponible en la propia guía de uso de CodeIgniter, que hemos probado y resulta sencillo y efectivo.

Se trata de utilizar un método de trabajo con .htaccess que llaman "negativo", donde todas las URLs son redirigidas a través del archivo index.php, a no ser que tengan una forma determinada que no queramos que se redireccione.

Por ejemplo, una URL como esta:

www.loquesea.com/empresas

Se redirigiría a una URL como esta otra:

www.loquesea.com/index.php/empresas

Pero esa redirección se haría de manera transparente al usuario y al navegador que nos visita. Es decir, el procesamiento de la página se hace a través del index.php, pero nosotros no llegamos a percibir que en el servidor se ha llevado a cabo esa redirección, quedando la URL en la barra de direcciones siempre sin el index.php.

Ahora bien, hay determinadas direcciones que no vamos a desear que se redirijan, como puede ser una hoja de estilos CSS. Es decir, podemos tener en nuestro servidor un archivo como este:

www.loquesea.com/css/estilos.css

Y en ningún caso queremos que se procese a través del index.php, sino que directamente se devuelva el archivo CSS que hay en esa ruta. Este es el caso en el que se utiliza el método "negativo" del htaccess, a través del comando "RewriteCond" (condición de redirección). Este caso obvio también lo tendríamos, por ejemplo, en archivos como el robots.txt o aquellos donde podamos tener librerías de código Javascript.

Código htaccess para eliminar el index.php de CodeIgniter

Así pues, podríamos tener un archivo .htaccess en la raíz de la instalación del framework, que suele ser también la raíz del dominio donde estamos trabajando, con un código como el que sigue:

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

Esto diría que se redirijan todos los archivos que se soliciten a este dominio, menos los que contengan el propio index.php, css, js, images o robots.txt.

La redirección se hará a través de la misma URL, pero agregando "index.php/" después del nombre del dominio y antes de lo que haya justo después de ese nombre de dominio.

Nota: si tuviéramos CodeIgniter instalado en un subdirectorio de nuestro dominio, por ejemplo, en el subdirectorio "carpeta", la regla de redirección "RewriteRule" cambiaría un poco:

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

Ahora, sólo nos faltaría decirle a CodeIgniter que, al componer URLs para los enlaces entre las distintas páginas de nuestra aplicación web PHP, no coloque el index.php, pues no lo necesitamos. Esto lo podemos hacer desde el archivo de configuración principal, que están en: system/application/config/config.php

Simplemente tendríamos que editar la variable de configuración "index_page", poniéndola a la cadena vacía.

$config['index_page'] = "";

Este no sería necesariamente el único método. Por ejemplo, en la Wiki oficial de Codeigniter explican un modo distinto de conseguirlo, aunque bastante más complejo: http://codeigniter.com/wiki/mod_rewrite/

Miguel Angel Alvarez

Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...

Manual