2014-10-07 5 views
0

젠드 프레임 워크 2에 작은 CMS 시스템을 구축하고 있습니다. 새 웹 사이트에 새 URL 구조가 생기며 303 오류 처리기를 만들고 싶습니다.zf2에서 HTTP 303 리디렉션 처리

이상적인 해결책 : 페이지 URL이 생성됩니다 찾을 경우는 (dB 또는 배열)에 저장된 이전 URL 목록을 확인합니다 발견되지 않은 경우 사용자 또는 검색 엔진은 이전 URL을 통해 웹 사이트를 방문

303 리디렉션 목록에 URL이 없으면 404 페이지가 작성되어야합니다. URL을

예 :

이전 (없음이 종료 없음) URL :이이 새로운 URL로 리디렉션해야 www.example.com/category/product123.html : www.example.com/category/product- 이름/

총 100 개 이상의 오래된 페이지가 새 URL로 리디렉션되어야합니다.

어떻게해야합니까?

답변

1

HTTP 303은 사용자 지정 리디렉션 헤더이며 오류가 아니므로 HTTP POST 후에 사용해야합니다. 기존 URL을 보존하는 것이 원하는 경우 (서재용 등) HTTP 301 - Moved Permanently 헤더를 사용하는 것이 좋습니다.

여러 가지 방법이 모두 의 다른 자원 HTTP 서버응용 프로그램 수준으로 모든 HTTP 요청을 리디렉션하는 존재가있다. 나는 nginx/apache 레벨을 선호한다. Nginx에 대한 예 :

응용 프로그램 수준에서
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 

, 당신은 쉽게 내부 요청을 리디렉션 할 수 있습니다 :이 유사한 반응을 생산할 예정이다 HTTP 서버의 구성을 다시로드 한 후 이전 /category/product123.html URL을 호출 이제

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; 
    } 

    # ... 

} 

, 유효한 Response 개체로 반환하는 컨트롤러 작업 :

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

희망이 있습니다.

관련 문제