一、Apache虛擬主機:php
在Apache上有關於虛擬主機的具體說明,具體能夠參考Apache手冊,這裏簡單的說一下虛擬主機主要分爲兩種:linux
一、基於主機名的虛擬主機(一個IP地址,多個網站) web
二、基於IP地址的虛擬主機(每一個站點擁有一個的獨立IP地址) apache
雖然是兩種,但其實仔細比對,就能發現:基於主機名的其實很是像一個特殊的基於IP地址的方式,如何實現虛擬主機,思路是這樣的:windows
二、windows下:瀏覽器
基於主機名 dom
設置DNS(windows上的 / hosts文件),好讓咱們的域名被解析到特定的IP地址,例如 127.0.0.10,當咱們訪問域名時,其實是訪問到了這個特定的IP地址網站
--> 這個IP地址指向咱們的Apache服務,此時修改咱們的httpd.conf文件開啓咱們 mod_rewrite模塊 url
同時啓用咱們的虛擬主機配置文件spa
固然咱們也能夠不啓用這個文件,而將須要配置的虛擬主機信息直接寫到httpd.conf中
--> httpd-vhosts.conf 的配置:
文件中配置的寫法會有默認的示例,相似於這樣:
可是有一些須要注意的地方:(這是我看手冊以爲比較重要的,我的意見且不徹底整理)
一、<VirtualHost>的使用並不影響Apache的監聽地址。你須要使用Listen來確保Apache正在監聽正確的地址。
也就是說:這個設置是在Apache地址監聽的基礎上纔有做用的,因此這裏的IP要有做用首先須要Listen的正確設置保證
二、基於域名的虛擬主機:
# # Virtual Hosts # # If you want to maintain multiple domains/hostnames on your # machine you can setup VirtualHost containers for them. Most configurations # use only name-based virtual hosts so the server doesn't need to worry about # IP addresses. This is indicated by the asterisks in the directives below. # # Please see the documentation at # <URL:http://httpd.apache.org/docs/2.2/vhosts/> # for further details before you try to setup virtual hosts. # # You may use the command line option '-S' to verify your virtual host # configuration. # # Use name-based virtual hosting. # # apache 服務默認監聽 80 端口 # 若是要監聽其餘端口須要使用 # listen 443 NameVirtualHost *:80 # # VirtualHost example: # Almost any Apache directive may go into a VirtualHost container. # The first VirtualHost section is used for all requests that do not # match a ServerName or ServerAlias in any <VirtualHost> block. # <VirtualHost *:80> # 管理員郵箱 ServerAdmin webmaster@webroot # 應用根目錄 DocumentRoot "E:/wamp/www" # 虛擬域名 ServerName www.webroot.com # 下面這兩行無關緊要 ErrorLog "logs/dummy-host2.localhost-error.log" CustomLog "logs/dummy-host2.localhost-access.log" common </VirtualHost> <VirtualHost *:80> ServerAdmin webmaster@warmmail DocumentRoot "E:/wamp/www/WarmMail" ServerName www.wmail.com # 能夠看到這裏下面的我刪掉了,沒有什麼影響 </VirtualHost> NameVirtualHost *:80 <VirtualHost *:80> ServerAdmin wangxb@phpexcel DocumentRoot "E:/wamp/www/phpexcel" ServerName www.phpexcel.com </VirtualHost>
效果:
瀏覽器中輸入:wangxb.com (這裏是個人一個thinkPHP的項目)
瀏覽器輸入:webroot.com (這個我綁定到了www的根目錄)
基於IP地址的虛擬主機:
上面基本都是基於主機名的虛擬主機的設置,很簡單,下面的基於IP的虛擬主機更簡單,由於個人感受是:基於主機名的虛擬主機就是基於IP的虛擬主機的特例,爲何這麼說?
答:由於咱們能夠把基於主機名的當作是基於IP的,只是有兩個域名基於同一個IP,也就是說:有兩個 <VirtualHost> 以上的設置的IP和端口是相同的,可是其中的ServerName 和DocumentRoot 設置不相同。
好了來看看,基於IP的設置,至於httpd.conf的配置就不須要修改了,主要是修改
/ hosts文件 ,也就是將域名綁定到不一樣的ip
再來修改 /httpd-vhosts.conf 文件
咱們看到兩個兩個域名兩個ip,對應的DocumentRoot 是不同的。
效果:瀏覽器中的效果是和上面的效果同樣的,這裏咱們使用F12的 network 來看看
webroot.com
network:
wangxb.com
network
好了,以上就是虛擬主機的設置。這裏作個簡單的介紹,Apache的中文手冊其實已經很是的給力了,只有有一些基礎web開發的知識,手冊是徹底能夠看懂的,並且說得很是詳細。你們在配置的時候,出現問題能夠去好好看看手冊
特別強調:
一、以上的每一步有關Apache配置文件的修改必須重啓Apache服務
二、當你在修改hosts文件時可能提示你權限不夠
三、當你編輯httpd.conf文件啓用虛擬主機配置文件時,你可能會遇到這個狀況:
讓我鬱悶了兩個小時的問題,莫名其妙的沒有權限,想一想我何時在window會這樣啊? 一時我竟不知所措,若是是linux的話,我確定回去ll -> chmod的啦,可是這是windows啊,怎麼會這樣,想一想剛纔還好好的怎麼就這樣了呢,一切又還原,重啓服務,最後發現就是上面的開啓虛擬主機配置文件的緣由,當咱們開啓了虛擬主機的配置時,咱們必定要正確設定 下的 httpd-vhosts.conf