2011年2月3日 星期四

Apache, 使用 mod_vhost_alias 免重開新增網站

httpd.conf:
LoadModule vhost_alias_module modules/mod_vhost_alias.so
#DocumentRoot "D:\sites"
VirtualDocumentRoot "D:\sites\%0"
<Directory D:\sites">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

在 D:\www\ 裡面新增一個 aaa.example.com 資料夾,
就等於建好了一個 aaa.example.com 的網站。
請求網頁: http://aaa.example.com/index.html
會返回:D:\sites\aaa.example.com/index.html
在 D:\sites 下面的資料夾,就是一個網站的根目錄

進階用法:
VirtualDocumentRoot "D:/sites/%3+/%2.1/%2.2/%2.3/%2"
%:代表後面接的是可變動的內容。
小數點前面的數字:整個主機名稱的第幾個字
小數點後面的數字:承上,該字裡面的第幾個字母。
0:代表全部字串。
+:代表某個起點之後的所有字串

本例題範例:
請求網頁:http://www.domain.example.com/directory/file.html
會返回:D:\sites\example.com\d\o\m\domain\directory\file.html
說明:
完整主機名稱是 www.domain.example.com
第一組  %3+  => 第3個字以後的全部。第3個字是example,所以這組是 example.com
第二組 %2.1 => 第2個字裡面的第1個字母,所以是 domain 裡的 d
第三組 %2.2 => 第2個字裡面的第2個字母,所以是 domain 裡的 o
第四組 %2.3 => 第2個字裡面的第3個字母,所以是 domain 裡的 m
第五組 %2 => 第2個字,所以是 domain
合起來就變成上面那樣的目錄結構。

另外,我自己實驗的結果,這樣的標籤好像沒用:
<Directory D:\sites\%0>
所以無法針對每個站台做各別設定。
只能用 <Directory D:\sites>

延伸閱讀:
Apache Module mod_vhost_alias
Apache Virtual Host 最簡單的做法 (含 DNS,讓你建目錄等於建虛擬主機 )

沒有留言:

張貼留言