Todas las URLs de CodeIgniter tienen un index.php que si lo deseamos podemos eliminar usando un archivo htaccess.
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.
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.
RewriteRule ^(.*)$ /carpeta/index.php/$1 [L]
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...