2010-08-18 5 views
0

저는 domainA.com에 ZF 웹 사이트를 가지고 있는데 domainB.com의 별칭을 domainA.com/photos/album와 같이 지정하여 앨범이 domainB의 루트가되도록합니다.별칭 도메인에서 젠드 디렉토리

어떻게 수행 할 수 있습니까?

+0

domainB.com에 '.../photos/album'을 (를) 가리키는 웹 루트를 제공합니다. 이것은 serverfault.com 질문입니다 - 옮기기 투표는 –

+0

/photos/album은 실제 디렉토리가 아닙니다. 컨트롤러 및 액션이 index.php 파일로 전달되었지만 그때조차도 다시 작성 규칙을 사용하면 인덱스에 자동으로? – doremi

+0

그건 좀 더 재미 있어요. 이것은 실제로 상당히 가능합니다. 먼저, 해당 섹션에 대한 여러분의 견해가 (domainA.com/photos/album'에 있다고 생각하더라도) domainB와 관련된 링크를 생성해야한다고 생각 해본 적이 있습니까? –

답변

1

여기서 첫 번째 단계는 mod_rewrite을 사용하여 올바른 경로로 URL을 다시 쓰는 것입니다. 당신의 대한 기존 .htaccess 루트의 상단에 다음과 같은 뭔가 작업을해야합니다 : 경로가 domainB.com 후 지정되지 않은 경우이 /photos/album/로 리디렉션됩니다

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{HTTP_HOST} =domainB.com [NC] 
RewriteCond %{REQUEST_URI} !^/photos/album 
RewriteRule .* /photos/album/$0 [L] 

. 내가 올바르게 기억한다면 Zend Framework는 컨트롤러/액션이 슬래시로 끝나는 지 아닌지에 대해 까다롭지 않으므로 잘되어야합니다. 웬일인지 /photos/album 일 필요가있는 경우에도 해결책이 있지만 필요하지 않은 경우 과도 함입니다.

나중에 규칙 집합은 URL을 index.php으로 변환하고 Zend Framework는 라우팅을 수행합니다. 그러나 젠드 프레임 워크가 라우팅하는 기본 방법은 REQUEST_URI을 사용하는 것입니다.이 경우에는 원하는대로되지 않습니다 (요청을 다시 작성하지 않고 domainB.com 뒤에 전달 된 내용이됩니다). 실제로는 REDIRECT_URL을 사용해야하며 새 RewriteRule으로 설정됩니다.

controller request documentation

이 시나리오를 (종류)에 대해 설명하고 올바른 경로 정보를 얻기 위해 드롭 인 (drop-in) 요청 개체로 Zend_Controller_Request_Apache404을 사용할 수 있다는 설명 : 당신이 수 있음을 확신한다

$request = new Zend_Controller_Request_Apache404(); 
$front->setRequest($request); 

을 또한 현재 요청 객체를 가져 와서

$request->setRequestUri($_SERVER['REDIRECT_URL']); 

을 호출하십시오. 호스트에서이 작업을 조건부로 수행하면 올바르게 작동해야합니다.

+0

더 쉬운 해결책 (확실하게 받아 들여질 것입니다)이 domainB.com이/photos/앨범에 대한 액세스 만 허용하는 것이 아닌지 궁금합니다 -이 URL 외부의 다른 모든 요청은 거부되거나/photos/앨범. – doremi

+0

@ Joshua McGinnis - 정말 달라지는 것 같습니다. 개인적으로 URL의 "청결"을 위해이 접근법을 사용하려는 경향이 있습니다. 일단 설정되면 설정을 많이 망칠 필요가 없습니다. 제안한대로 리디렉션을 수행하면 백엔드 부분을 수정하지 않아도되므로 해당 작업을 수행 할 책임을 추적하는 것이 더 쉽습니다. –