Ruteo URI
Tipicamente hay una relacion uno-a-uno entre una cadena URL y su correspondiente controlador clase/metodo. Los segmentos en una URI normalmente siguen este patron:
www.your-site.com/class/function/id/
En algunas instancias, sin embargo, querras remapear esta relación para que una clase/funcion diferente pueda ser llamada en lugar de la correspondiente a la URL.
Por ejemplo, digamos que quieres que tus URLs tengan este prototipo:
www.tu-sitio.com/product/1/
www.tu-sitio.com/product/2/
www.tu-sitio.com/product/3/
www.tu-sitio.com/product/4/
Normalmente el segundo segmento de la URL es reservada para el nombre de funcion, pero en este ejemplo en lugar de eso tiene el ID del producto. Para superar esto, CodeIgniter te permite remapear el manejador URI.
Creando tus propias reglas de ruteo
Las reglas de ruteo son definidos dentro de tu archivo application/config/routes.php. Dentro de el deberias poder ver un arreglo llamado $route que te permite especificar tus criterios de ruteo. Las rutas podrian ser especificadas utilizando comodines o Expresiones Regulares
Comodines
Un tipico comodidin de ruteo deberia parecerse a esto:
$route['product/:num'] = "catalog/product_lookup";
En una ruta, la llave (key) del arreglo contiene la URI que debe coincidir, mientras que el valor del arreglo contiene el destino a donde debe ser re-ruteado. En el ejemplo anterior, si el literalmente la palabra "product" es encontrada en el primer segmento de la URL, y el numero es encontrado en el segundo segmento, la clase "catalog" y el metodo "product_lookup" seran usados.
Puedes hacer que coincidan los valores literales, o puedes usar dos tipos de comodines:
:num
:any
:num coincidira con un segmento que unicamente contiene numeros.
:any coincidira con un segmento que contenga cualquier caracter.
Nota:Las Rutas correran en el orden que sean definidas. Rutas superiores siempre tomaran precedencia sobre las que tienen menos precedencia.
Ejemplos
He aqui algunos ejemplos de ruteo:
$route['journals'] = "blogs";
una URL conteniendo la palabra "journals" en el primer segmento sera remapeada a la clase "blogs".
$route['blog/joe'] = "blogs/users/34";
una URL conteniendo el segmento blog/joe sera remapead a la clase "blogs" y el metodo "users". El ID sera seteado a "34".
$route['product/:any'] = "catalog/product_lookup";
una URL con "product" como el primer segmento, y cualquier cosa en el segundo sera remapeado a la clase "catalog" y el metodo "product_lookup".
Importante: No use barras al comienzo/final.
Expresiones Regulares
Si lo prefieres, puedes utilizar expresiones regulares para definir tus reglas de ruteo. Cualquier expresion regular es permitida, como lo son las back-references.
Note: Si usa back-references debes usar la sintaxis de dolares antes que la sintaxis de doble barra diagonal.
Una tipica Expresion Regular deberia parecerse a esto:
$route['products/([a-z]+)/(\d+)'] = "$1/id_$2";
En el ejemplo anterior, una URI similar a products/shirts/123 llamara en su lugar a la clase controlador shirts y la funcion id_123.
Tambien puedes mesclar comodines con expresiones regulares.
Rutas Reservadas
Hay dos rutas reservadas:
$route['default_controller'] = 'welcome';
Esta ruta indica cual clase controlador debera ser cargado si la URI no contiene datos, caso que ocurrira cuando la gente cargue la URL raiz. En el ejemplo anterior, la clase "welcome" seria la que se cargue. Te animamos a que siempre tengas una ruta por defecto, caso contrario una pagina 404 apareceria por defecto.
$route['scaffolding_trigger'] = 'scaffolding';
Esta ruta te permite colocar un palabra secreta, la cual debe estar presente en la URL, disparando la caracteristica scaffolding. Por favor lea la pagina Scaffolding para mas detalles.
Important: Las rutas reservadas deben aparecer antes que cualquier comodin o expresion regular de ruteo.