Apache二級域名實現方法 .
(無意看到,以前的東東,記下來了)
首先,你的擁有一個有泛域名解析的頂級域名,例如: domain.com
其次,在 httpd.conf 中開啟 mod_rewrite
之後,在 httpd.conf 的最後,新增以下內容:
RewriteEngine on
RewriteMap lowercase int:tolower
RewriteMap vhost txt:/usr/local/etc/apache/vhost.map
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
RewriteCond ${vhost:%1} ^(/.*)$
RewriteRule ^/(.*)$ %1/$1
其中的 /usr/local/etc/apache 是你的 apache 伺服器配置檔案所在路徑,根據實際情況更改。
然後,在這個所在路徑的目錄下建立一個檔案: vhost.map
內容為:
www.domain.com /usr/local/www/data-dist/domain
bbs.domain.com /usr/local/www/data-dist/bbs
anyname.domain.com /usr/local/www/data-dist/anyname
以上部分都是:" 域名+空格+絕對路徑" 的形式。
最後,在你的網站根目錄 /usr/local/www/data-dist 下,建立對應目錄:
domain , bbs , anyname 等等,理論上可以無限。
這樣,通過瀏覽器,訪問www.domain.com 時,實際上訪問的就是 /usr/local/www/data-dist/domain目錄下的檔案。同理,訪問 bbs.domain.com 實際上訪問的就是 /usr/local/www/data-dist/bbs 目錄下的檔案。而且,你可以
隨時更改 vhost.map 來增加、刪除、修改你的二級域名和所指向的實際路徑,不用重啟 apache。
實現動態二級域名解析的一個關鍵就是,把特有的名字怎麼能夠提出來,因為RewriteRule中的匹配,是不包括域名的匹配的,其實這其中就是一層窗戶紙,把域名先重寫放到“路徑”中,再對“路徑”重寫一次就可以了
對於實現動態域名解析,以下提供幾個例子
將*.531163.com解析到指定路徑
RewriteCond %{HTTP_HOST} ^[a-z0-9\-]+\.531163\.com$
RewriteRule ^/(.*)$ /%{SERVER_NAME}/$1 ##注##
RewriteRule ^/([a-z0-9\-]+)\.531163\.com/(.*)$ /YourWwwRoot/$1/$2 [L]
這樣的結果 zhong.531163.com/xx 解析到了wwwRoot/zhong/xx
同意先做泛域名解析這裡不多說,解析到某個IP下,在Apache中做如下重寫(只寫Rewrite部分了):
RewriteCond %{HTTP_HOST} ^[a-z0-9\-]+\.531163\.com$
RewriteRule ^/?$ /%{HTTP_HOST}
RewriteRule ^/([a-z0-9\-]+)\.531163\.com/?$ /blog.php?u=$1 [L]