Большинство из этих решений будут работать только в том случае, если в вашем контроллере есть только одна функция с именем index()
. Если у вас есть это в ваших маршрутах:
$route['search/(:any)'] = 'search/index/$1';
С учетом вышесказанного в ваших маршрутах произойдет то, что ваша функция поиска будет работать, но затем, если вы добавите какие-либо другие функции к тому же контроллеру, они все будут перенаправлены на /search/index/$1
.
Единственное решение, которое я могу придумать, которое позволяет вам использовать URL-адрес, который вы хотите, и в то же время иметь возможность добавлять любые другие функции в ваш контроллер поиска, - это добавить своего рода беспорядочные условия в ваш файл маршрутов. Вот как это будет выглядеть и что будет делать:
$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';
}
То, что он делает, в основном говорит: «если запрошенный URL-адрес не содержит имени какой-либо из функций моего контроллера поиска, то он должен быть предназначен для индекса, поэтому мы активируем правило маршрута для индекса».
Это позволит вам без проблем принимать запросы на search/any_other_functions_you_have
и активировать правило для сокрытия функции индекса, только если URI запроса не соответствует ни одному из них.
Одним из побочных эффектов этого является то, что вы никогда не получите 404. Например, если кто-то вводит URL-адрес, такой как «yourdomain.com/search/something», и ожидает, что он покажет страницу результатов, не связанную с поиском, которую он выиграл не получите 404, предупреждающих их о том, что такой страницы не существует, и вместо этого приложение будет предполагать, что они ввели поисковый запрос. Тем не менее, похоже, что это не является большой проблемой для вас, и я не вижу ничего страшного в том, что один контроллер не может вернуть 404 с.