Обработка перенаправлений HTTP 303 в zf2

Я строю небольшую систему CMS в Zend Framework 2. Мой новый веб-сайт будет иметь новую структуру URL, и я хотел бы создать 303 обработчик ошибок.

Идеальное решение:

Пользователь или поисковая система посетят веб-сайт по старому URL, если страница не была найдена, и проверит список старых URL, сохраненных в (db или array), если URL найден, это создаст редирект 303. Если URL не был найден в списке, он должен создать страницу 404.

Пример URL:

старый (не выходящий) URL: www.example.com/category/product123.html этот адрес следует перенаправить на новый URL: www.example.com/category/product-name/

Всего у меня будет более 100 старых страниц, которые нужно перенаправить на новый URL.

Как я должен сделать это правильно?

0

Решение

HTTP 303 является настраиваемым заголовком перенаправления, не является ошибкой и должен использоваться после HTTP POST. Если вы хотите сохранить некоторые устаревшие URL-адреса (для целей SEO и т. Д.), Вы можете использовать HTTP 301 — перемещен навсегда заголовок.

Существует несколько способов перенаправить любой HTTP-запрос на любой другой ресурс в обоих Http-сервер а также приложение уровень. Я бы предпочел уровень nginx / apache. Пример для nginx:

server {

# ...

location ~ "^/category/([a-zA-Z0-9]+).html" {
# Example: http://www.example.com/category/product123.html
# The $1 will be product123
return 303 http://www.example.com/category/$1;
}

# ...

}

Теперь зову старый /category/product123.html URL после перезагрузки конфигурации вашего http-сервера выдаст ответ, подобный следующему:

HTTP/1.1 303 See Other
Server: nginx/1.X.0
Date: Tue, 07 Oct 2014 20:47:29 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 168
Connection: keep-alive
Location: http://www.example.com/category/prodct123

На уровне приложения вы можете легко перенаправить запросы внутри любого действия контроллера, возвращаемого действительным отклик объект:

public function anyControllerAction()
{
$response = $this->getResponse();
$response->getHeaders()->addHeaderLine('Location', 'http://www.example.com/category/prodct123');
$response->setStatusCode(303);
return $response;
}

Надеюсь, поможет.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]