apache對域名的泛解析

不少網站都開通blog功能。當今也比較流行的,我在CU上也註冊了一個如:chenwenming.cublog.cn 註冊完後,地址欄輸入:http://chenwenming.cublog.cn 後自動轉到blog.chinaunix.net/u1/40226/立馬就生效了,當時感受很奇怪,通常域名生效起碼等2個小時後才能生效。後來查了相關資料,原來是域名的泛解析.
在DNS服務器上添加一條A記錄。其中,「主機名」填寫「*」 ,「指向」填寫爲本身網站的服務器IP。這樣全部
*.cublog.cn 都指向60.28.166.87 因此無論你申請什麼名字,如:chenwenming.cublog.cn 都解析到這個IP上。最主要的是apache的配置了。

將全部的虛擬主機段先刪除,加入
ServerName local
ServerAlias *
UseCanonicalName OFF
VirtualDocumentRoot D:/www/%1

ServerName在這裏不起做用,ServerAlias會將域名解析到D:/www下對應的目錄,這樣就不用每次都修改httpd.conf文件了。
須要注意的是使用VirtualDocumentRoot指令須要加載mod_vhost_alias模塊,
去掉包含mod_vhost_alias行對應的LoadModule和AddModule前面的"#",restart一下apache就OK了

apache

試了一下,果真很爽,可使用服務器

VirtualDocumentRoot /www/%2+app

來實現泛解析,不過無論什麼二級域名都被解析到根目錄了,鬱悶!也就是說
*.21andy.com 會被指向 /www/21andy.com網站

再想一想,因而,能夠用spa

VirtualDocumentRoot /www/%2+/%0.net

來實現二級域名分目錄,即
www.21andy.com 會被指向 /www/21andy.com/www.21andy.com
test1.21andy.com 會被指向 /www/21andy.com/test1.21andy.com
test2.21andy.com 會被指向 /www/21andy.com/test2.21andy.comunix

有點不足,這樣,www.21andy.com 也須要在21andy.com目錄下再建一個目錄了,要是www能到根目錄,其餘二級域名到二級目錄就行了,不過也好,這樣規範點,呵呵rest

主要是如下這2句,不再用一個個綁域名了,只須要創建對應域名的目錄日誌

UseCanonicalName Off
VirtualDocumentRoot /www/%2+/%0orm

==============================================================

1、使用 mod_vhost_alias

1. 簡單的動態虛擬主機

# 從 Host: 頭中取得服務器名字 Server Name
UseCanonicalName Off

# 這裏的日誌格式,能夠在未來經過第一個參數域來分隔不一樣的虛擬主機的日誌
LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
CustomLog logs/access_log vcommon

# 在返回請求的文件名的路徑中包含進服務器名字: server name
VirtualDocumentRoot /www/hosts/%0/docs
VirtualScriptAlias /www/hosts/%0/cgi-bin

2. 更爲有效的基於 IP 地址的虛擬主機

# 從 IP 地址反解析獲得服務器名字(server name)
UseCanonicalName DNS

# 在日誌中包含 IP 地址,便於後續分發
LogFormat "%A %h %l %u %t \"%r\" %s %b" vcommon
CustomLog logs/access_log vcommon

# 在文件路徑中包含 IP 地址
VirtualDocumentRootIP /www/hosts/%0/docs
VirtualScriptAliasIP /www/hosts/%0/cgi-bin

2、使用 mod_rewrite

1. 使用 mod_rewrite 實現簡單的動態虛擬主機

# 從 Host: 頭獲取服務器名字
UseCanonicalName Off

# 可分割的日誌
LogFormat "%{Host}i %h %l %u %t \"%r\" %s %b" vcommon
CustomLog logs/access_log vcommon


# ExecCGI is needed here because we can't force
# CGI execution in the way that ScriptAlias does
Options FollowSymLinks ExecCGI


# 接下來是關鍵部分

RewriteEngine On

# a ServerName derived from a Host: header may be any case at all RewriteMap lowercase int:tolower
## 首先處理普通文檔:
# 容許變名 /icons/ 起做用 - 其餘變名類同
RewriteCond %{REQUEST_URI} !^/icons/
# 容許 CGIs
RewriteCond %{REQUEST_URI} !^/cgi-bin/
# 開始「變戲法」
RewriteRule ^/(.*)$ /www/hosts/${lowercase:%{SERVER_NAME}}/docs/$1

## 如今處理 CGIs - 咱們須要強制使用一個 MIME 類型
RewriteCond %{REQUEST_URI} ^/cgi-bin/
RewriteRule ^/(.*)$ /www/hosts/${lowercase:%{SERVER_NAME}}/cgi-bin/$1 [T=application/x-httpd-cgi]

# 好了!

2. 使用獨立的虛擬主機配置文件 vhost.map

vhost.map 文件包含了相似下面的內容:

www.customer-1.com /www/customers/1
www.customer-2.com /www/customers/2
# ...
www.customer-N.com /www/customers/N

http.conf 包含了:

RewriteEngine onRewriteMap lowercase int:tolower# 定義映像文件RewriteMap vhost txt:/www/conf/vhost.map# 和上面的例子同樣,處理變名RewriteCond %{REQUEST_URI} !^/icons/RewriteCond %{REQUEST_URI} !^/cgi-bin/RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$# 這裏作基於文件的從新映射RewriteCond ${vhost:%1} ^(/.*)$RewriteRule ^/(.*)$ %1/docs/$1RewriteCond %{REQUEST_URI} ^/cgi-bin/RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$RewriteCond ${vhost:%1} ^(/.*)$RewriteRule ^/(.*)$ %1/cgi-bin/$1

相關文章
相關標籤/搜索