Я пытаюсь создать маршрут Zend_Controller_Router_Route_Regex для обработки URL-адресов в следующей форме:
search?q=chicken/page=2
, где первый подшаблон регулярного выражения будет chicken
, а второй — 2
. Что касается второй части, где page=2
, я хочу сделать ее необязательной, если это первая страница, то есть page=1
. Таким образом, другой URL-адрес, такой как search?q=chicken
, также будет допустимым и эквивалентен search?q=chicken/page=1
.
Вот моя попытка, хотя и безуспешная, но чтобы дать вам лучшее представление о том, что я пытаюсь сделать.
$route = new Zend_Controller_Router_Route_Regex(
'search\?q=([a-zA-Z0-9]+)(?:/page=(\d+))',
array(
'page'=> '1',
'module' => 'default',
'controller' => 'search',
'action' => 'index' ),
array( 1 => 'query', 2 => 'page' ),
'search?=%s/page=%d');
$router->addRoute('search', $route);
Проблема в том, что я не могу составить правильное регулярное выражение.
Заранее спасибо.
РЕДАКТИРОВАТЬ №1
Правильное регулярное выражение, как указывает MA4, 'search\?q=([a-zA-Z0-9]+)(?:/page=(\d+))?'
На настоящую проблему указывает Дэррил. Вот еще немного информации, чтобы представить вещи в перспективе.
Текстовое поле и кнопка моего поиска
<form action="/search" method="get">
<input type="text" name="q" />
<input type="submit" value="Search" />
</form>
Каждый раз, когда я нажимаю кнопку search
, я получаю запрос search?q=[text]. Как заставить его пройти маршрут совпадения регулярных выражений?
Вот что я хочу сделать, однако код не работает
if($this->getRequest()->getParam('query')){
// redirect success
} else {
$url = "search?q=" . $this->_getParam('q');
$this->_redirect(route('search'), array('code' => 301 ));
}