Использование Zend Framework для перенаправления / пересылки (аналогично состоянию 301) старых URL-адресов новым контроллерам / действиям. - PullRequest
0 голосов
/ 01 декабря 2010

У меня довольно старый сайт, который я сыт по горло рефакторингом, поэтому я перестраиваюсь.

Старые URL не имеют никакой согласованности именования, чтобы я мог создать какое-то правило, поэтому можно ли иметь какой-то маршрутизатор / контроллер, который перенаправляет ($ this -> _ forward ()) старые URL на новое место?

Например, когда я звоню http://www.example.com/this-is-a-url-with-a-random-name.php, он будет перенаправлен на http://www.example.com/url/random-name ...

Может быть, это совпадение может существовать в массиве, поэтому ключом будет старый URL, а значением будет новое местоположение?

Или я просто пытаюсь заново изобрести колесо, и я должен просто придерживаться хороших правил ol '.htaccess с перенаправлениями 301?

(надеюсь, все это имеет смысл?)

Ура, Angel

1 Ответ

1 голос
/ 01 декабря 2010

Я начну с того, что порекомендую использовать вашу конфигурацию apache для размещения изменений, если это возможно. Это намного быстрее, чем использование .htaccess и вашего приложения Zend Framework.

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

Если вы хотите использовать свое приложение Zend Framework для этого и если у вас есть набор URL-адресов, которые могут иметь различную структуру, лучшее место в контроллере ошибок по умолчанию в качестве «последней попытки». Причина этого заключается в том, что если у вас есть URL /myoldurl, который не существует сейчас (но есть в вашем списке перенаправления), и вы реализуете его в будущем как собственный контроллер / модуль - ваш контроллер автоматически вступит во владение. 1006 *

Внутри errorAction() есть переключатель, который решает, является ли ваша ошибка 404 или 500.

Внутри блока 404 вы можете добавить код для перенаправления. Это не полный код, просмотрите его и при необходимости вставьте недостающие фрагменты данных.

// [code omitted]
        switch ($errors->type) {
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
                // this is the original request string ie: /myoldurl
                $pathinfo =  $this->_request->getPathInfo();

                // decide if pathinfo is in your redirect list
                if ($pathinfo is in some list of old urls) {
                    // and get $newurl from your list
                    $newurl =  something from a list of new urls;

                    // set redirect code to 301 instead of default 302
                    $this->_helper->redirector->setCode(301);
                    $this->_redirect($newurl);
                }
                // 404 error -- controller or action not found
                $this->getResponse()->setHttpResponseCode(404);
                $this->view->message = 'Page not found';
                break;
//[...]
...