2013-01-11 1 views
0

mod_rewrite의 RewriteRules를 사용하여 아파치에 몇 가지 기본 리디렉션이 있습니다. Zend Framework를 사용하여 프로그래밍 방식으로 이러한 리디렉션을 수행하려고합니다. 이러한 리디렉션에는 다른 도메인이 포함될 수 있습니다. 예.Zend - mod_rewrite와 같은 기타 도메인 리디렉션

RewriteRule ^/xmas(.*) http://mycdn.com/things/xmas$1 [P] 

아파치로 리디렉션 할 때 url은 동일하게 유지됩니다. 브라우저의 주소 표시 줄에 ZF에서이 동작을 모방하고 싶지만 다른 도메인에 대한 방법을 찾을 수 없습니다.

Zend_Controller_Router_Route을 확장하고 match() 메서드를 확장 한 다음 모듈, 컨트롤러, 동작 등의 필드가있는 배열을 반환하면 사이트 리디렉션을 수행 할 수 있습니다.

class My_Route extends Zend_Controller_Router_Route 
{ 
// ... 

    public function match($path) 
    { 
    // ... 
    return 
     array(
     'module' => 'default', 
     'controller' => 'mycontroller', 
     'action' => 'index', 
    ); 
    } 
} 

그러나 분명히 단지 (Haven't 어느 사양에 도메인 또는 전체 URL을 지정하는 방법을 발견의 현장 루트 작동하기 때문에 나는 그것이 다른 도메인으로 리디렉션을 위해 작동하도록 관리하지 않은).

내가 좋아하는 또 다른 방법을 시도 :

$r = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector'); 
$r->gotoUrl("http://otherdomain.com/some-stuff-to-redirect-to")->redirect(); 

이는 리디렉션을 수행하지만, 완전히 새로운 요청을하는 페이지를 변경합니다.

어떻게 이것을 ZF에서 구현할 수 있습니까? ZF1 사용.

답변

0

mod_rewrite 규칙의 [P] 플래그는 나에게 새로운 것이지만, 문서에서 보면 (mod_proxy를 사용하여) 지정된 URL에 요청을 프록시하도록 Apache에 알리는 것처럼 보입니다. 따라서 실제로 내부적으로 해당 URL에 다른 요청을하고 다시 사용자에게 제공합니다. 리디렉션이 아닙니다. ZF에서 동등한 것은 Zend_Http_Client을 사용하는 작업으로 요청을 라우팅하여 원격 서버에 다른 요청을하는 것입니다.

이것은 좋은 생각이 될 수있는 상황을 생각할 수 없습니다. 이 예제는 원격 CDN에 요청을 다시 쓰는 것입니다. 이렇게하면 CDN을 처음 사용하는 모든 이점 (성능 향상, 대역폭 비용 절감)을 완전히 무효화 할 수 있습니다. 아마도 유스 케이스를 설명 할 수 있다면 당신이하려는 일을 성취 할 수있는 더 좋은 방법 일 것입니다.

+0

Re. 비용 : CDN에 대한 요청이 사용자에게 전달되기 전에 원래 서버로 "돌아와야"하므로 CDN에서 사용자에게 서비스를 제공 할 때 얻을 수있는 이점은 발생하지 않습니다. 레. 내가 뭘하고 싶은지 - 나는 정적으로 CDN에 집을 호스팅하고 있지만 분명히 홈 URL이 CDN으로 나타나길 원하지 않는다. 성능 저하없이 이것을 결합 할 수 있습니까? – xmar

+0

나는 '집'이라고 가정하면 홈페이지를 의미합니다. 사용자가 설정 한 프록시 항목에 관계없이 홈페이지를 보려고 서버에 방문하는 경우 CDN에서 홈페이지를 호스팅하지 않습니다. 기본적으로 코드에서 설정하려는 내용을 지원하는 '원본 끌어 오기'CDN을 조사 할 수 있습니다. 그러나 CDN에서 홈페이지를 호스팅하려면 CDN에서 전체 도메인의 DNS를 지정해야합니다. 그것은 전부 또는 아닙니다. –

+0

감사합니다. Tim. 마침내 홈 HTML을 내 응용 프로그램 서버로 옮기고 정적 요소 만 CDN에서 제공합니다. 있다면 영향을 측정합니다. – xmar