Laboratorio: modificar urls para CodeIgniter con mod_rewrite
10:00 H (CET)| Temas: Apache · Laboratorio · PHP
CodeIgniter es uno de los frameworks PHP de los que más se habla últimamente, a mí personalmente me gusta bastante, aunque hay algunas cosas que no son como me gustaría.
Una de ellas es la estructura de las URLs, las URLs siguen el formato:
http://dominio/controlador/metodo/parametro/parametro/...
El controlador es la clase que se encarga de hacer las operaciones y el método es el método de la clase que realiza una función concreta.
Por ejemplo si tenemos una tienda online, podemos tener un controlador para productos y un método que sea editar, con el que se podrá modificar las características del producto. La url sería la siguiente:
http://tienda.com/articulo/editar/cafetera
Con esta url podemos editar un artículo llamado cafetera y además es bastante entendible. Pero, ¿qué pasa si queremos mostrar el artículo cafetera?, pues que la url debería ser la siguiente:
http://tienda.com/articulo/ver/cafetera
Pero lo de ver no queda demasiado bien y queda mejor si es directamente:
http://tienda.com/articulo/cafetera
El problema nos lo encontramos cuando queremos usar una URL que no indique el método y si un parámetro. Si no usamos ni método ni parámetro, CodeIgniter toma por defecto el método index, pero si no usamos método y si parámetro, CodeIgniter no es capaz de saber que lo que mandamos es un parámetro, por lo que hay que usar el Apache para que siga la estructura de CodeIgniter.
RewriteEngine onRewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^articulo/(.+)$ index.php/articulo/ver/$1 [L]RewriteCond $1 !^(index\.php|favicon\.ico)
RewriteRule ^(.*)$ index.php/$1 [L]
Hay que tener en cuenta que este ejemplo es válido únicamente si solo se va a usar siempre dos segmentos en la url, uno para el controlador y otro para el parámetro.
La segunda parte y el uso de index.php es debido a que CodeIgniter usa este script para gestionar toda la aplicación, y para que no aparezca, debemos redireccionarlo todo a index.php, menos los ficheros que existen como el favicon, el robot.txt, etc.
Relacionados
Feedback (1) » Formulario
1. Kenneth Brenes ~ Lunes, 14 Abr 2008 | 21:44H:
Otra cosa a tomar en cuenta es que el modo de escritura debe estar activado(¨on¨ dentro del httpd.conf) para evitar problemas.. Aunque el default es que se encuentre activado, existen servidores que por seguridad no lo activan inicialmente, y se general algunos errores con el .htaccess y en general en el manejo del los URL´s.

