2010-08-18 54 views
0

我在domainA.com上有一個ZF網站,我想將domainB.com別名爲:domainA.com/photos/album,這樣這個相冊就是domainB的根。Alias Domain to Zend Directory

這樣做可能會怎樣?

+0

通過爲domainB.com指定一個指向'.../photos/album'的網頁根。這是一個serverfault.com問題 - 投票遷移 – 2010-08-18 13:46:32

+0

/照片/相冊不是一個真正的目錄 - 它是一個控制器和操作傳遞給index.php文件 - 但即使如此,我認爲它是一個重寫規則可以通過這些到索引自動? – doremi 2010-08-18 13:48:41

+0

這使它更有趣一點。這實際上相當可行;但首先,你是否認爲,即使應用程序認爲它位於'domainA.com/photos/album'(根據已翻譯的控制器路由),您對該部分的看法是否需要生成與'domainB'有關的鏈接? – 2010-08-18 14:09:53

回答

1

此處的第一步是使用mod_rewrite將URL重寫爲正確的路線。像你exisitng .htaccess根頂部以下的東西應該工作:

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

如果domainB.com後沒有指定路徑這會重定向到/photos/album/。如果我沒有記錯的話,Zend Framework對你的控制器/操作是否以斜線結束沒有挑剔,所以這應該沒問題。如果因爲某種原因需要/photos/album,我也有一個解決方案,但是如果不需要,它會過度殺傷。

稍後,您的規則集將URL轉換爲index.php,Zend Framework執行其路由。然而,Zend Framework的路由默認方式是使用REQUEST_URI,這恰好不是我們在這種情況下想要的(這將是在domainB.com之後傳遞的任何內容,而不是我們重寫該請求的內容)。我們實際上需要使用REDIRECT_URL,這是由我們的新RewriteRule設置。

controller request documentation描述此情形(種),並解釋說,你可以使用Zend_Controller_Request_Apache404作爲一個活動的請求對象以獲得正確的路由信息​​:

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

我相當肯定,你可以也只是得到當前的請求對象,並調用

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

就可以了。只需在主機上進行此操作,並希望它應該都能正常工作。

+0

我不知道是否一個更容易的解決方案(當然會被接受),將只允許domainB.com訪問/照片/相冊 - 所有其他請求之外的這個網址將被拒絕和/或重定向回到/ photos /專輯。 – doremi 2010-08-19 18:55:28

+0

@Joshua McGinnis - 我猜這取決於,真的。我個人傾向於採用這種方法來實現URL的「清潔」,因爲一旦建立起來,您就不必惹惱它了。按照您的建議執行重定向,可以避免不必修改後端部分,因此在這種情況下,更容易跟蹤負責完成該工作的內容。 – 2010-08-19 19:19:28