2016-03-09 2 views
1

Я использую это правило маршрутизатора:CakePHP 2.x маршрутизации

Router::connect('/mp/*', array('controller' => 'objekts', 'action' => 'search', Router::queryString(''))); 

Это работает, как ожидалось!

Теперь я попытался это добавить 301 редирект:

Router::redirect(
    '/mp/*', 
    array(
     'controller' => 'objekts', 
     'action' => 'search', 
     Router::queryString('') 
    ), 
    array('status' => 301) 
); 

, но это приводит «только» http://www.domain.com/objekts/search строки запроса отсутствует.

Пропустить что-нибудь в синтаксисе?

ответ

1

Это потому, что Router::queryString() создает строку запроса из переданных параметров.

Строка запроса Либо строка уже скомпилированных аргументов строки запроса, либо массив аргументов для преобразования в строку запроса.

Это значит, что для работы Router::queryString() вам необходимо передать массив или другую строку. Router::queryString(['foo' => 'bar', 'chicken' => 'nuggets']) создаст ?foo=bar&chicken=nuggets

Я предполагаю, что вы хотите получить существующий Строка запроса и передать его вместе с перенаправлением URL. Согласно документации 2.0 CakePHP на Redirect Routing:

Router::redirect(
    '/home/*', 
    array('controller' => 'posts', 'action' => 'view'), 
    // or array('persist'=>array('id')) for default routing where the 
    // view action expects $id as an argument 
    array('persist' => true) 
); 

перенаправляет/дома/* к/сообщений/вид и передает параметры в/сообщений/зрения. Использование массива в качестве адресата перенаправления позволяет вам использовать другие маршруты, чтобы определить, куда должна быть перенаправлена ​​строка URL.

Это означает, что array('persist' => true) следует заменить Router::queryString().

+0

Можете ли вы узнать, что делает массив ('persist' => true)? Является ли это равным 301 перенаправлению? Поскольку мой первый рабочий способ перенаправляет 302, вот почему я хочу изменить его, так как хочу, чтобы Google узнал, что эти ссылки 301 перенаправляют. – user1555112

Смежные вопросы