2012-08-08 109 views
0

我一直在閱讀以前的帖子,但我無法弄清楚什麼會工作或不會與我的設置工作,所以任何幫助在這裏非常感謝!通配符DNS?重定向? CNAME?的.htaccess?

對於初學者,我使用的是最新版本的CakePHP(2.2)。我正在一個帶有MediaTemple的(gs)帳戶上託管。

我有一個網站,用戶可以在domain.com上註冊一個帳戶。

用戶可以在dashboard.domain.com上訪問和更改他們的信息。

用戶可以在sites.domain.com/username上查看他們的個人信息。用戶可以通過從數據庫中選擇主題來更改此頁面的外觀,爲此,我使用CakePHP的主題結構。有一個基本的佈局和多個CSS選項,所以一切都從數據庫拉到這一個文件,並根據他們選擇的'主題',不同的CSS文件被拉。這一切運作良好。

我更喜歡的是,他們從通配符子域(?)看到他們的頁面,即。 username.domain.com而不是sites.domain.com/username。

我也想給他們註冊他們自己的域名,並指向/重定向/某些東西到子域的選項,同時仍然在url中顯示其唯一的域。我也不想主持其他域名,所以這可以做名稱服務器?

有關我從哪裏出發的想法?在此先感謝:)

+0

這對於單個問題來說太多了。對不起,但它非常廣泛。將它分成多個較小的問題 - 如何設置通配符子域名,如何自定義每個用戶的子域名等等...... Aswell,其中的很多內容對這裏來說都是偏離主題的。嘗試serverfault爲dns/web服務器配置的東西 – 2012-08-08 20:49:22

回答

2

這是一個非常普遍的要求,它屬於Web應用程序開發的「多租戶」方法。

I answered a question recently使用這種方法。

代碼

鏈接的答案表明,我用它來支持對事物的CakePHP的側動態子域DomainRoute。這有你需要從項目的這一點處理它的所有代碼。

唯一的應用程序了特定代碼在那裏,你將需要更改代碼是Cause相關的東西:

$Cause = new Cause(); 
if (!($Cause->domainExists($domain) ... 

Cause是在我的應用模型,它有一個domainExists方法。此方法檢查以查看通過的$domain是否存在於任何Cause(或子網站)上。的domainExists的實現是一個非常簡單的find電話:

public function domainExists($domain) { 
    $causes = $this->Cause->findByDomain($domain); 
    return !empty($causes); 
} 

如果域不存在於數據庫中,它增加了全域到$params變量。

如果域不存在存在於數據庫中,它會進行一些重定向。

DNS

DNS應設置爲通配符。這樣做的方式,從供應商提供的不同,但在普通的BIND,它這樣做:

* CNAME domain.com. 

,增加了一個通配符CNAME到你的DNS記錄。

我希望有幫助。以前回答的問題中的代碼是最有幫助的,因此請確保您先仔細閱讀。