Я вполне уверен, что ^
не является необходимым.Попробуйте без него:
$route['(en|es|ro)/tag/(:any)'] = "fetch/results?search_query=$1&search=tag";
В этом контексте ^
будет считаться литеральной строкой.Если вы хотите использовать регулярное выражение, я думаю, вам придется заключить само регулярное выражение в скобки, например:
$route['(^(en|es|ro))/tag/(:any)'] = "fetch/results?search_query=$1&search=tag";
Я не уверен на 100% в этом, но если я правоба должны работать.Однако маршруты всегда предполагают, что первая часть шаблона - это то, с чего должна начинаться строка, поэтому ^
не должен быть необходим в любом случае.
Еще одна вещь : вы не 'т второй матч, но первый.Я полагаю, что вы хотите заменить $1
на $2
в своем маршруте.
$route['(en|es|ro)/tag/(:any)'] = "fetch/results?search_query=$2&search=tag";
// ^^^1^^^^ ^^^2^^ ^^
EDIT : После дальнейшего изучения и тестирования кажется, что Codeigniter не может правильно обрабатыватьмаршруты, которые используют строку запроса, такую как ?key=value
.Если вы используете косую черту перед знаком вопроса ?
, вы можете, по крайней мере, заставить его перенаправить на нужный контроллер и метод:
$route['(en|es|ro)/tag/(:any)'] = "fetch/results/?search_query=$2&search=tag";
URL-адрес, подобный следующему:
http://example.com/es/tag/Codeigniter's Router
... будет перенаправлен в метод results
с этой строкой в качестве аргумента, но $_GET
будет пустым:
?search_query=Codeigniter%27s%20Router&search=tag
Таким образом, вы можете выделить аргумент с помощью parse_str()
:
function results($request)
{
$request = ltrim($request, '?');
parse_str($request, $get);
// echo $get['search_query']
}
Вы всегда можете использовать .htaccess
, конечно, ноЯ понимаю желание хранить всю логику маршрутизации в одном месте.Извините, если это не тот ответ, на который вы надеялись, но я боюсь, что без написания собственного маршрутизатора невозможно сделать это очевидным способом в Codeigniter.Мое предложение, вероятно, будет заключаться в том, чтобы найти другой способ обработки маршрутизации и способ доступа к данным по URL.