1. 程式人生 > >Apache二級域名實現方法 .

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]