La mayoría de estas soluciones solo funcionarán si solo tiene una sola función llamada index()
en su controlador. Si usted tiene esto en sus rutas:
$route['search/(:any)'] = 'search/index/$1';
Con lo anterior en sus rutas, lo que sucederá es que su función de búsqueda funciona, pero luego si se agrega ninguna otra función a ese mismo controlador que todo va a ser redirigido a /search/index/$1
.
La única solución que puedo pensar que le permite usar la URL que desea y aún puede agregar otras funciones a su controlador de búsqueda es agregar un tipo de condicional desordenado a su archivo de rutas.Esto es lo que se verá así y lo que hace:
$request = $_SERVER['REQUEST_URI']; // Only add this for readability if(!strpos($request, 'search/another_function') || !strpos($request, 'search/more_functions')) { $route['search/(:any)'] = 'search/index/$1'; }
Lo que esto hace es básicamente diciendo "si la URL solicitada no contiene el nombre de cualquiera de mis búsqueda funciones del controlador, entonces debe ser significaba para el índice así que activaremos la regla de ruta para el índice ".
Esto le permitirá tomar las solicitudes de search/any_other_functions_you_have
sin problema y solo activar la regla para ocultar la función de índice cuando un URI de solicitud no concuerde con ninguna de ellas.
Un efecto colateral de esto es que nunca obtendrá un 404. Por ejemplo, si alguien ingresa una URL como "sudominio.com/buscada/algo" y esperan que muestre una página de resultados que no sean de búsqueda, no recibirá un 404 que los alerta sobre el hecho de que no hay una página como esa y, en su lugar, la aplicación asumirá que lo que escribieron es un término de búsqueda. Sin embargo, parece que esto no es un gran problema para ti y no veo que sea tan terrible que un controlador no pueda devolver 404s.
¿Encontró una solución al final? – robjbrain