Я начну с того, что порекомендую использовать вашу конфигурацию 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;
//[...]