2010-04-21 2 views
1

Я создал новый сайт для компании, и я хотел бы, чтобы все предыдущие результаты поисковой системы были перенаправлены. Поскольку было довольно много страниц, и большинство из них, где использование идентификатора, я хотел бы использовать что-то общее вместо повторной маршрутизации всех старых страниц.CakePHP, Маршрут старых результатов поиска google на новую домашнюю страницу

Моя первая мысль была сделать:

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

И положить, что в самом конце файла routes.php [так как он имеет приоритет] так, что все запросы не проверки с предыдущими действиями маршрута вернется с этим и вернется на главную страницу.

Однако это не работает.

Когда я использую другой путь на маршрутизаторе, он перенаправляется успешно. Например, если я даю это:

Router::connect('/*', array('controller' => 'projects', 'action' => 'browser')); 

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

Я вставив мой routes.php файл [так как он мал] в надежде, что кто-то может дать мне подсказку:

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

    Router::connect('/company/*', array('controller' => 'articles', 'action' => 'view')); 

    Router::connect('/contact/*', array('controller' => 'contacts', 'action' => 'view')); 

    Router::connect('/lang/*', array('controller' => 'p28n', 'action' => 'change')); 

    Router::connect('/eng/*', array('controller' => 'p28n', 'action' => 'shuntRequest', 'lang' => 'eng')); 

    Router::connect('/gre/*', array('controller' => 'p28n', 'action' => 'shuntRequest', 'lang' => 'gre')); 


    Router::parseExtensions('xml'); 
+0

Что происходит при подключении/* к Страницам :: дисплея? –

+1

Я бы, наверное, попытался решить это в htaccess с регулярным выражением и выдать 301 –

+0

#Travis Leleu, он получает это сообщение: «Не найдено Ошибка: запрошенный адрес '/ asdasdf' не найден на этом сервере." – ion

ответ

2

Большая проблема заключается в том, что маршрут не перенаправляет, он связывает URL-адреса с ответами. Другими словами, он гарантирует, что ваши недействительные URL-адреса по-прежнему выдают действительную страницу. Это точно противоположно тому, чего вы хотите достичь.

Вы хотите сообщить посетителям, что URL-адрес, который ранее был действительным, больше не существует. Вы делаете это, выдавая соответствующие коды ответа HTTP, 301 Moved Permanently в этом случае. Без этого URL-адреса по-прежнему будут действительны для поисковых систем, и они не будут обновлять свой индекс.

Вам необходимо либо связать все недействительные URL-адреса с помощью маршрутов с каким-либо действием контроллера, которое выдает $this->redirect('...', 301), либо вы можете использовать некоторые правила .htaccess для перенаправления. Какой из них использовать зависит от сложности перенаправления, но вы, вероятно, сможете использовать простые правила .htaccess mod_rewrite.

Есть достаточно примеров на SO: https://stackoverflow.com/search?q=htaccess+301+redirect

3

Вместо того, чтобы пытаться обрабатывать все в файле маршрута cakePHP, я бы рекомендовал вам использовать файл .htaccess для 301 перенаправления страниц по мере необходимости.

То, что у вас выше, не перенесет ранжирование, потому что, насколько я могу видеть, 301 перенаправление не выводится ни в один из предлагаемых вами маршрутов.

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