說明 | 提供大批量虛擬主機的動態配置支持 |
---|---|
狀態 | 擴展(E) |
模塊名 | vhost_alias_module |
源文件 | mod_vhost_alias.c |
本模塊經過將HTTP請求中的IP地址和/或"Host:
"頭內容轉換爲所要提供服務的文件路徑名來建立動態的虛擬主機配置。這樣的作法,使得應用配置大量類似的虛擬主機變得更爲容易。 php
若是使用mod_alias
或mod_userdir
來將URI轉換爲文件名,那麼mod_vhost_alias
的設定將被覆蓋。例如,下面的配置將始終把/cgi-bin/script.pl
映射爲/usr/local/apache2/cgi-bin/script.pl
。 html
ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/
web
VirtualScriptAlias /never/found/%0/cgi-bin/
本模塊中的全部指令都用於將字符串替換爲路徑名。被替換的字符串(之後稱爲"name")能夠是服務器名(參見UseCanonicalName
指令以瞭解決策方法)或者是"點數字"格式的虛擬主機IP地址。替換操做由printf
格式修飾符控制,該修飾符有如下幾種格式: apache
%% |
插入一個百分號(% ) |
%p |
插入虛擬主機的端口號 |
%N.M |
插入名稱(或者名稱的一部分) |
N
和M
被用來指定name中的子字符串。N
從name中用小數點分隔的某部分中選取,而M
是從N
選中的字符串中選取部分字符。M
是可選的且默認爲"0";小數點當且僅當M
存在時才必須書寫。替換操做以下: 服務器
0 |
整個name |
1 |
第一部分 |
2 |
第二部分 |
-1 |
最後一部分 |
-2 |
倒數第二部分 |
2+ |
從第二部分開始到最後的全部部分 |
-2+ |
倒數第二部分以及以前的各部分 |
1+ 和-1+ |
等同於0 |
若是N
或M
大於部分的個數,則簡單的用下劃線來替換。 dom
對於一個簡單的基於名稱的虛擬主機,配置文件中可能會使用下面的指令: spa
UseCanonicalName Off
code
VirtualDocumentRoot /usr/local/apache/vhosts/%0
那麼對http://www.example.com/directory/file.html
的請求將會返回文件/usr/local/apache/vhosts/www.example.com/directory/file.html
orm
對於擁有大量虛擬主機的狀況而言,減小vhosts
目錄大小的一個好辦法就是從新組織。爲此你可使用下面的配置: htm
UseCanonicalName Off
VirtualDocumentRoot /usr/local/apache/vhosts/%3+/%2.1/%2.2/%2.3/%2
那麼對http://www.domain.example.com/directory/file.html
的請求將會返回文件/usr/local/apache/vhosts/example.com/d/o/m/domain/directory/file.html
進一步的分割能夠用name尾字符來索引(hashing),例如:
VirtualDocumentRoot /usr/local/apache/vhosts/%3+/%2.-1/%2.-2/%2.-3/%2
該例返回文件/usr/local/apache/vhosts/example.com/n/i/a/domain/directory/file.html
也能夠這樣使用:
VirtualDocumentRoot /usr/local/apache/vhosts/%3+/%2.1/%2.2/%2.3/%2.4+
該例返回文件/usr/local/apache/vhosts/example.com/d/o/m/ain/directory/file.html
對於基於IP地址的虛擬主機,能夠這樣配置:
UseCanonicalName DNS
VirtualDocumentRootIP /usr/local/apache/vhosts/%1/%2/%3/%4/docs
VirtualScriptAliasIP /usr/local/apache/vhosts/%1/%2/%3/%4/cgi-bin
對http://www.domain.example.com/directory/file.html
的請求將會返回文件/usr/local/apache/vhosts/10/20/30/40/docs/directory/file.html
,這裏假設www.domain.example.com
的IP地址爲10.20.30.40。對http://www.domain.example.com/cgi-bin/script.pl
的請求將會執行程序/usr/local/apache/vhosts/10/20/30/40/cgi-bin/script.pl
若是你但願在VirtualDocumentRoot
指令中包含點字符(.
),但這又和%
指令產生衝突,能夠這樣解決:
VirtualDocumentRoot /usr/local/apache/vhosts/%2.0.%3.0
對http://www.domain.example.com/directory/file.html
的請求將會返回文件/usr/local/apache/vhosts/domain.example/directory/file.html
LogFormat
指令的%V
和%A
在和本模塊的協同中起了必定做用。
<VirtualHost *:80> ServerName anyweb ServerAlias * UseCanonicalName OFF VirtualDocumentRoot /vhost/www/%0 </VirtualHost>