要實現這個功能要用到 apache 的 virtual host 的功能,先必需設定 apache 各個 virtual host 指到同一個目錄,然後再程式裡面判定是經由哪個 host 進來,再給不同的內容即可。
這邊主要說明 php 的部份怎麼作,在 php 裡面可以取得 $_SERVER 這個變數,其中裡面有 HTTP_HOST 這個變數,其內容就是你是經由哪個 DNS 連上該主機的。如果是像 *.example.com 這種 subdomain 的話,直接分析 * 是什麼,就代表這是不同的站台。
- 首先要設定 wildcard DNS 就是把 *.example.com 指到同個網站。
- 設定 apache 支援 wildcard DNS 和 virtual host
apache 的設定方法如下:
[coolcode]
NameVirtualHost *
ServerAdmin master@example.com
# 最重要的為以下二行
ServerName example.com
ServerAlias *.example.com
DocumentRoot /var/www/data/
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
[/coolcode]
基本運作程式碼如下,讓其他的程式 include 此程式,這樣就可以取得 $site 了:
[coolcode lang="php"]
// 假設現在是用 *.example.com 作判定,用以下的程式就可以取出 site 是什麼了
global $site;
$site = explode(".",$_SERVER['HTTP_POST']);
$site = $site[0];
?>
[/coolcode]
目前 lyceum/lifetype 都是使用這種方法去判定是哪些站台,再從資料庫裡找出每個站台所需的資料顯示出來。
使用此方法,就可以用一份程式碼,顯示多重且不同風格的網站了。


