在apache下創建多個站點 在httpd.conf中使用以下內容 NameVirtualHost 211.161.197.119 <VirtualHost 211.161.197.119> ServerName bug.54ncr.com DocumentRoot /www/http/mantisbt </VirtualHost> <VirtualHost 211.161.197.119> ServerName mycity.54ncr.com DocumentRoot /www/http/billing_system </VirtualHost>
=================================================================
php
ServerAlias:服務器別名,在Apache中能夠用於設置虛擬主機接收到個域名,也能夠用於接收泛解析的域名。具體的設置方法以下:html
1、用於設置虛擬主機接收多個域名thinkphp
一個虛擬主機經常會接收多個域名解析,好比:一個虛擬主機要同時介紹fke.la,54ncr.com兩個域名,或者是兩個二級域名,如:www.fke.la, www1.fke.la,對於這種狀況,能夠在用ServerAlias輕鬆作到,打開apache的設置文件:httpd.conf,在該主 機的設置代碼中:apache
<VirtualHost 192.168.1.12>服務器
ServerName 「fke.la」 #默認域名;app
ServerAlias 54ncr.com www1.fke.la #不一樣域名用空格隔開;dom
DocumentRoot 「D:\wwwroot\fke.la」ide
<Directory 「D:\wwwroot\fke.la」>網站
Options Indexes FollowSymLinksspa
AllowOverride all
</Directory>
</VirtualHost>
保存httpd.conf文件,重啓apche便可生效。
2、 用於接收泛域名解析
一個虛擬主機是能夠接收泛域名解析的,也是經過SeverAlias選項設置,經過設置該選項不只能夠接收二級泛域名解析,也能夠接收三級、四級泛 域名解析,具體設置以下:
<VirtualHost 192.168.1.12>
ServerName 「fke.la」 #默認域名;
ServerAlias *.fke.la #用*表示泛域名,若是要接收三級泛域名解析,能夠寫成這樣:*.my.fke.la;
DocumentRoot 「D:\wwwroot\fke.la」
<Directory 「D:\wwwroot\fke.la」>
Options Indexes FollowSymLinks
AllowOverride all
</Directory>
</VirtualHost>
保存httpd.conf文件,重啓apche便可生效。
=================================================================
在DNS服務器上添加一條A記錄。其中,「主機名」填寫「*」 ,「指向」填寫爲本身網站的服務器IP。這樣全部
*.yourdomain.cn 都指向本身網站的服務器IP 因此無論你申請什麼名字,如:dlzok.yourdomain.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了
試了一下,果真很爽,可使用
VirtualDocumentRoot /www/%2+
來實現泛解析,不過無論什麼二級域名都被解析到根目錄了,也就是說
*.yourdomain.com 會被指向 /www/yourdomain.com
爲了解決這個問題,能夠用
VirtualDocumentRoot /www/%2+/%0
來實現二級域名分目錄,即
www.yourdomain.com 會被指向 /www/yourdomain.com/www.yourdomain.com
test1.yourdomain.com 會被指向 /www/yourdomain.com/test1.yourdomain.com
test2.yourdomain.com 會被指向 /www/yourdomain.com/test2.yourdomain.com
有點不足,這樣,www.yourdomain.com 也須要在yourdomain.com目錄下再建一個目錄了,要是www能到根目錄,其餘二級域名到二級目錄就行了,不過也好,這樣規範點。
主要是如下這2句,不再用一個個綁域名了,只須要創建對應域名的目錄
UseCanonicalName Off
VirtualDocumentRoot /www/%2+/%0
==============================================================
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 on
RewriteMap 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/$1
RewriteCond %{REQUEST_URI} ^/cgi-bin/
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
RewriteCond ${vhost:%1} ^(/.*)$
RewriteRule ^/(.*)$ %1/cgi-bin/$1
瀏覽:1710 發佈日期:2013/09/13 分類:技術分享 關鍵字: 自定義子域名
若是你的網站有會員,但願每一個會員均可以用一個個性的子域名來顯示他的主頁,怎麼處理啊?
這裏提供一種 理論上無限制任何會員數量的解決方式,固然得要你的服務器和域名支持
第一:你的域名須要支持泛解析
第二:你的服務器必須支持綁定泛解析域名
固然這兩種狀況不能知足的狀況下也不是不能解決,只是沒那麼強大和方便(好比你就固定解釋指定幾個子域名,而後服務器固定綁定幾個子域名,這個是這裏介紹方法中的特殊狀況,就比如我說任何數乘以0都等於0,你說0乘以也等於0同樣的道理)
行了,別廢話了,直接上代碼:
一、入口文件
二、默認模塊的默認操做:
三、.htacees文件的寫法固然不少細節的地方還要去考慮,好比第二步中的 subDomain中不存在的狀況下應該怎麼處理這裏只是提供一種思路,若是您有更好的方式,也但願您不要吝嗇,一塊兒分享給你們