Codeigniter permite redefinir URLS a tu gusto, para lo cual dispone de un archivo de configuración para enrutar las URLs, ubicado en /system/application/config/routes.php (para versiones 2.0.3 en adelante la ruta es /application/config/routes.php )
Si lo editas, verás que tiene dos que son enrutamientos reservados:
$route[‘default_controller’] = «welcome»;
$route[‘scaffolding_trigger’] = «»;
Pero tambien puedes definir tus propios enrutamientos:
para lo cual se utiliza un array de PHP denominado $route… tipicamente la clave es el PATRÓN a matchear y el valor del array es la URL real a enrutar…
Ejemplo:
$route['seccion-bogs/blog-de-diego'] = "blogs/users/34";
En este caso si tu sitio es example.com, la dirección URL :
http://example.com/seccion-bogs/blog-de-diego se enrutara a http://example.com/blogs/users/34 internamente.
tambien puedes usar wildcards :num :any asi:
$route['seccion-bogs/blog-de-(:any)'] = "blogs/users/$1";
Hace lo mismo que antes salvo que se enrutará el nombre como clave …
http://example.com/seccion-bogs/blog-de-juanperez12 se enrutará a http://example.com/blogs/users/juanperez12
Y tambien podés utilizar expresiones regulares (REGEX) :
$route['products/([a-z]+)/(\d+)'] = "$1/id_$2";
Con la siguiente definición una URL como http://example.com/products/herramientas/34 se enrutaria a http://example.com/herramientas/id_34
podés utilizar combinado REGEX y WILDCARDS :
$route['products/([a-z]+)/(:any)'] = "$1/id_$2";
El efecto es el mismo.
Un enrutamiento que me sirvio en mi sitio:
$route['central-de-compras/[0-9a-zA-Z-\-\.]+/(:any)'] = "es/c/search/$1";
Entonces esta dirección central-de-compras/empresa-castilla.html/132125454 se enruta como es/c/search/132125454
Notar que no he tocado en absoluto el .htaccess , todo el enrutamiento es interno de CodeIgniter.
Si querés la info oficial del tema en el tutorial de codeigniter ingresa en http://codeigniter.com/user_guide/general/routing.html
Hola, estoy literalmente sufriendo con esto de las URL’s amigables en CodeIgniter, quizás puedas ayudarme. El caso está en que estoy siguiendo un tutorial de CodeIgniter en una version anterior a la 2, me ayuda bastante con las explicaciones pero veo que hay algunas cosas que cambiaron en la version 2 como el uso de CI_Controller en vez de solo Controller.
El tema aquí es que siguiendo el segundo video de codeigniter de tutorialesvirtuales.com, hice lo siguiente:
1. Abrir el archivo httpd.conf de apache y quitar el «michi» de LoadModule Rewrite…
2. Reiniciar Apache
3. Escribir el siguiente codigo en un archivo llamado .htaccess :
Código:
RewriteEngine On
RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-d
RewriteRule ^(.*)$ /CI_Pruebas/index.php/$1 [L]
ErrorDocument 404 /CI_Pruebas/index.php
4. Colocar el nuevo archivo en la raíz de mi proyecto.
5. Modificar el archivo config.php (del CodeIgniter): Poner como $config[‘base_url’]=’http://localhost/mi_proyecto/ y $config[‘index_page’]=» <- ponerla en blanco.
6. En el fichero routes.php elegir como default_controller el controlador que yo he creado de prueba: El clásico "holamundo".
No me funciona, me aparece "Error interno del servidor". Pregunto, ya no se hace así? veo que tu lo haces de otra forma…
Qué pasaría si yo deseo recibir valores por la URL, no comprendo bien, estoy medio mareado con este tema, por favor ojala puedas ayudarme. Que pasaría si la URL fuera: http://www.ejemplo.com/personas.php?nombre=pepito&edad=35 y yo quisiera cambiar a URL amigables de la siguiente forma: http://www.ejemplo.com/personas/pepito/35.html ????
Sería posible utilizando routes?
Ojala puedas ayudarme a despejar mi duda, un cordial saludo.
Lo que estas obteniendo es un error de configuracion en EL SERVIDOR. No tiene nada que ver con codeigniter.
El archivo .htaccess debe estar en la carpeta que contiene TAMBIEN la carpeta «system»
Revisa esto:
RewriteRule ^(.*)$ /CI_Pruebas/index.php/$1 [L]
ErrorDocument 404 /CI_Pruebas/index.php
es /CI_Pruebas/index…..
o solo index.php/$1 [L]
En realidad mi proyecto está en:
C:/appserv/www/CI_Pruebas/aprendizaje/
Luego de ahí se desprende que index.php se encuentra dentro de aprendizaje….
pero yo no manejo el .htaccess asi que no se que esté mal…
Ricky,
el.htaccess lo tienes en C:/appserv/www/CI_Pruebas/aprendizaje/
y en ese directorio tienes la carpeta system ??
Si es asi, entonces :
RewriteEngine On
RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-d
RewriteRule ^(.*)$ /CI_Pruebas/aprendizaje/index.php/$1 [L]
ErrorDocument 404 /CI_Pruebas/aprendizaje/index.php
El error que te enviaba es error de configuracion del servidor, asique esta relacionado con el .htaccess
Mas alla de esto, de lo que habla el POST es que podes formar URLS amigables como te plazca, y reescribir el destino verdadero sin volver a tocar el .htaccess, ya que codeigniter encpsula ese comportamiento.
Bueno veo que los post son antiguos entonces creo que lo tendrán resuelto, Yo ahora tengo una duda no consigo pasar una llamada a por ejemplo
controlador/funcion/id
donde id en mi caso es un email que quiero validar en funcion al pasar la @ me da error rotundo no me deja pasarla como id. Entonces mi duda es como lo solucionarías que idea me podrías dar veo que el tutorial no llega a explicar esto y me paso y me quedé parado en una función AJAX que ando practicando.
Hola amigo,
Lo que tenes es otro problema, el @ no esta permitido en las URL por proteccion, para solucionarlo tienes dos opciones:
1 – Utiliza base64_encode(id) y base64_decode(id) para transformar el string del email en algo alfanumerico que no tenga caracteres prohibidos, y con el decode dentro del controlador recuperas el string original, osea el email.
2- -MENOS RECOMENDADA – Ingresa al config dentro de conifig.php localiza la linea:
$config[‘permitted_uri_chars’] = ‘a-z A-Z=0-9~%.:,_\-‘;
y cambiala por
$config[‘permitted_uri_chars’] = ‘@a-z A-Z=0-9~%.:,_\-‘;
Ahi permitira el @ dentro de las urls,
Hola estoy empezando con CI y estoy intentando crear subdirectorios en la carpeta controllers,
Tengo en una vista esta url , mi pregunta como la dirijo a la carpeta controllers/admin/login/check, he intentado en router.php poner $route(‘login/check)’) =’admin/login/$1′;, pero no me funciona
si la URL es midominio.com/admin/login y quieres que vaya a la carpeta admin/login/check (dentro de controllers)
en el route.php debes poner esto:
$route[‘admin/login’] = «admin/login/check»;
Si te entiendo. debe ser eso.