Маршрутизация дружественных поисковых систем URL для PagesController в CakePHP - PullRequest
1 голос
/ 17 июня 2011

Я пытаюсь создать дружественные для поисковых систем URL-адреса для контроллера страниц, т.е. /about вместо /pages/about.

Я попытался настроить следующие маршруты (внизу маршрутов.php):

Router::connect('/*', array('controller' => 'pages', 'action' => 'display'));

и

Router::connect('/:page', array('controller' => 'pages',
  'action' => 'display'), array('pass' => array('page'), 'page' => '[a-z]+'));

Оба правильно соответствуют /about, /support и т. д. Однако произошел сбой, когда у меня была пара действие / метод.Например, /contact должен направлять на PagesController->contact().Однако вышеприведенное перенаправило его на PagesController->display().

Должен быть способ выполнить это, не задавая конкретный маршрут для каждой страницы.Как я могу создать маршрут или набор маршрутов, которые:

  • Подражает поведению маршрута по умолчанию для PagesController.Это маршруты для display (), если пара действий / методов не существует.
  • Делает это с дружественным URL для поисковых систем.Это идет от root /, а не /pages.
  • . Демонстрирует как Router::connect(), так и Html->link()

. Я проверил примеры в CakePHP Book и просмотрел другие вопросы, такие как CakePHP маршрутизация на страницах контроллера .Ничто, кажется, не удовлетворяет спецификации выше.

1 Ответ

0 голосов
/ 07 июля 2011

Вам необходимо создать второй маршрут для вызова метода контакта и поместить его перед более общим правилом, чтобы соответствовать «everything [az] после / pages».Попробуйте это перед своим правилом:

Router::connect('/contact', array('controller' => 'pages', 'action' => 'contact'));

Всегда имейте в виду, что порядок маршрутов важен.Чем более общее правило, тем больше оно будет соответствовать.Поэтому ставьте более конкретные правила перед более общими.

...