2011-09-23 9 views
7

Si quiero capturar cada URL no existente que se pasó a mi aplicación web y mostrarles una vista sin servir un 404, ¿cómo lo haría?Controlador Catch-all/Ruta

Esencialmente necesito registrar las estadísticas basadas en estas visitas, pero tengo que hacerlo publicando contenido y no un error 404.

Por lo que yo puedo decir de application/config/routes.php, que podría utilizar

$route['default_controller'] = 'catchall'; 

pero necesito que para mi aplicación web real.

También podría utilizar

$route['404_override'] = 'catchall'; 

pero no quiere tirar 404s.

He intentado utilizar

$route['(:any)'] = '$1'; 

pero necesidad de registrar todo el URL (por ejemplo, cualquier longitud de los segmentos), no sólo el primer segmento.

Respuesta

6

Use $route['(:any)'] = 'catchall_controller'. Luego, en su controlador puede acceder a los segmentos de URI usando $this->uri->segment(n).

+3

Me pregunto por qué esta es la respuesta elegida, esto enruta todas las URL válidas también al controlador catchall .. !! –

+0

@ClainDsilva no si esta ruta se pone al final. Todavía es algo que necesitaría un comentario en caso de que alguien intentara reorganizar el archivo de rutas. – Goose

0

No sé la diferencia entre codeigniter y PHP normal, pero, en php normal, puede editar el htaccess o lo que sea para definir una página 404 personalizada.

En la página personalizada 404, haga algo como el equivalente a esto: $ requested = $ _ SERVER ['REQUEST_URI'];

para obtener la URL que fue solicitado .... hacer su manejo ... y hacer esto para borrar el 404: cabecera

("HTTP/1.1 200 OK"); encabezado ("Estado: 200 OK");

Luego, incluya su html o lo que sea que quiera servir.

+0

Espero que comprenda Codeigniter ahora. –

1

¿Ha intentado agregar múltiples rutas de captura para diferentes cantidades de segmentos?

$route['(:any)'] = '$1'; 
$route['(:any)/(:any)'] = '$1/$2'; 
$route['(:any)/(:any)/(:any)'] = '$1/$2/$3'; 

Supongo que funcionaría, pero podría haber una forma más elegante de hacerlo.

+0

¿Qué pasa con '(. +)'? –

Cuestiones relacionadas