亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 856 | 回復(fù): 0
打印 上一主題 下一主題

虛擬主機(jī)相關(guān)資料! [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2007-02-25 22:46 |只看該作者 |倒序?yàn)g覽
在一個(gè)IP地址上運(yùn)行多個(gè)基于域名的web站 點(diǎn)。
您的服務(wù)器有一個(gè)IP地址,而在DNS中有很多映射(CNAMES)到這個(gè)機(jī)器。 您而您想要在這個(gè)機(jī)器上運(yùn)行www.example1.com和 www.example2.org兩個(gè)站點(diǎn)。
注意
在您Apache服務(wù)器的配置中創(chuàng)建一個(gè)虛擬主 機(jī)并不會自動在您的DNS中對主機(jī)名做相應(yīng)更新。您必須自 己在DNS中添加域名來指向您的IP地址。否則別人是無法看到您的web 站點(diǎn)的。您可以在您的hosts文件中添加這一條目來進(jìn) 行測試,但這種方法僅適用于那些有這些條目的機(jī)器來使用。
服務(wù)器配置
# Ensure that Apache listens on port 80
Listen 80
# Listen for virtual host requests on all IP addresses
NameVirtualHost *
DocumentRoot /www/example1
ServerName www.example1.com
# Other directives here
DocumentRoot /www/example2
ServerName www.example2.org
# Other directives here

因?yàn)樾翘柶ヅ渌械牡刂罚灾鞣⻊?wù)器不接收任何請求。因?yàn)?www.example1.com首先出現(xiàn)在配置文件中,所以它擁有最高 優(yōu)先級,可以認(rèn)為是默認(rèn)或首要服務(wù)器。這意 味著如果一個(gè)接受的請求不能與某個(gè)ServerName指令相匹配, 它將會由第一個(gè)VirtualHost所伺服。
注意
如果您愿意,您可以用確定的IP地址來取代*。 在這種情況下,VirtualHost的參數(shù)必須 與NameVirtualHost的參數(shù)相符:
NameVirtualHost 172.20.30.40
# etc ...
不論如何,當(dāng)您的IP地址無法確定的時(shí)候,使用* 是很方便的——比如說,您的ISP給您配置的是動態(tài)IP地址,而您有 使用了某種動態(tài)域名解析系統(tǒng)時(shí)。因?yàn)?匹配任何IP 地址,所以在這樣的情況下,不論IP地址如何變化,您都不需要另 外進(jìn)行配置。
上述配置就是您在絕大多數(shù)情況下使用基于域名的虛擬主機(jī)時(shí)將要用到 的。事實(shí)上,僅在一種情況下這樣的配置不會讓您滿意:當(dāng)您想為不同的IP 地址或是端口提供不同的內(nèi)容時(shí)。
在多于一個(gè)IP的情況下使用基于域名的虛擬 主機(jī)。
注意
在這里討論的任何技術(shù)都可以推廣到使用任意數(shù)量的IP 地址。
服務(wù)器有兩個(gè)IP地址。一個(gè)(172.20.30.40)用于“主”服務(wù)器—— server.domain.com而另外一個(gè) (172.20.30.50),我們將用于構(gòu)建兩個(gè)或多個(gè)虛擬主機(jī)。
服務(wù)器配置
Listen 80
# This is the "main" server running on 172.20.30.40
ServerName server.domain.com
DocumentRoot /www/mainserver
# This is the other address
NameVirtualHost 172.20.30.50
DocumentRoot /www/example1
ServerName www.example1.com
# Other directives here ...
DocumentRoot /www/example2
ServerName www.example2.org
# Other directives here ...

任何不是針對172.20.30.50的請求都將由主服務(wù)器來伺服。 而提交給172.20.30.50卻沒有主機(jī)名或沒有 Host:頭的請求,都將為www.example1.com伺 服。
在不同的IP的地址(比如一個(gè)內(nèi)部和一個(gè)外部地址) 上提供相同的內(nèi)容。
服務(wù)器有兩個(gè)IP地址(192.168.1.1和 172.20.30.40)。這個(gè)機(jī)器位于內(nèi)部(局域網(wǎng))網(wǎng)絡(luò)和外部 (廣域網(wǎng))之間。在外部,域名server.example.com指向 外部地址(172.20.30.40),而在內(nèi)部,同樣的域名指向內(nèi) 部地址(192.168.1.1)。
服務(wù)器可以配置為向來自內(nèi)部和外部的請求提供同樣的內(nèi)容,您只需要 一個(gè)VirtualHost配置段就可以達(dá)到這個(gè)目的。
服務(wù)器配置
NameVirtualHost 192.168.1.1
NameVirtualHost 172.20.30.40
DocumentRoot /www/server1
ServerName server.example.com
ServerAlias server

現(xiàn)在,從不同的網(wǎng)絡(luò)提交的請求都會由同一個(gè) VirtualHost來伺服。
注意:
在內(nèi)網(wǎng)中,您可以使用 server這個(gè)名字來代替 server.example.com全名。
跟上面一樣,在上述的例子里,您可以用*來取代 具體的IP地址,這樣就可以對所有的地址返回相同的內(nèi)容了。
在不同的端口上運(yùn)行不同的站點(diǎn)。
如果您想讓同一IP的不同端口伺服多個(gè)域名。您可以借助在 “NameVirtualHost”標(biāo)簽中定義端口這樣的方法來達(dá)到這個(gè)目的。如果您 想使用不帶NameVirtualHost name:port的或是直接用Listen指令,您的配置將無法生效。
服務(wù)器配置
Listen 80
Listen 8080
NameVirtualHost 172.20.30.40:80
NameVirtualHost 172.20.30.40:8080
ServerName www.example1.com
DocumentRoot /www/domain-80
ServerName www.example1.com
DocumentRoot /www/domain-8080
ServerName www.example2.org
DocumentRoot /www/otherdomain-80
ServerName www.example2.org
DocumentRoot /www/otherdomain-8080

建立基于IP的虛擬主機(jī)
一個(gè)有兩個(gè)IP地址(172.20.30.40和 172.20.30.50)分別對應(yīng)域名 www.example1.com和www.example2.org的服務(wù) 配置如下:
服務(wù)器配置
Listen 80
DocumentRoot /www/example1
ServerName www.example1.com
DocumentRoot /www/example2
ServerName www.example2.org

如果存在主服務(wù)器(main server),那么對沒有出現(xiàn)在任一個(gè) 指令中的請求(比如,對 localhost的請求)都會由主服務(wù)器來伺服。
混用基于端口和基于IP的虛擬主機(jī)
如果您的服務(wù)器有兩個(gè)IP地址(172.20.30.40和 172.20.30.50)分別對應(yīng)域名 www.example1.com和www.example2.org。對每 個(gè)域名,您都希望在80端口和8080端口發(fā)布您的網(wǎng)站。您可以這樣配置:
服務(wù)器配置
Listen 172.20.30.40:80
Listen 172.20.30.40:8080
Listen 172.20.30.50:80
Listen 172.20.30.50:8080
DocumentRoot /www/example1-80
ServerName www.example1.com
DocumentRoot /www/example1-8080
ServerName www.example1.com
DocumentRoot /www/example2-80
ServerName www.example1.org
DocumentRoot /www/example2-8080
ServerName www.example2.org

混用基于域名和基于ip的虛擬主機(jī)
如果您想在一些地址上配置基于域名的虛擬主機(jī)而在另外一些配置基于 IP的虛擬主機(jī)。
服務(wù)器配置
Listen 80
NameVirtualHost 172.20.30.40
DocumentRoot /www/example1
ServerName www.example1.com
DocumentRoot /www/example2
ServerName www.example2.org
DocumentRoot /www/example3
ServerName www.example3.net
# IP-based
DocumentRoot /www/example4
ServerName www.example4.edu
DocumentRoot /www/example5
ServerName www.example5.gov

使用_default_虛擬主機(jī)
為所有端口配置 _default_虛擬主機(jī)
這樣配置,以捕獲任何指向沒指定的IP地址和端口的請求。比如 說:一個(gè)沒被任何虛擬主機(jī)使用的地址/端口對。
服務(wù)器配置
DocumentRoot /www/default

使用這樣一個(gè)使用通配符端口的默認(rèn)虛擬主機(jī)可以有效的防止請求被主 服務(wù)器接收。
如果一個(gè)地址/端口對已經(jīng)被一個(gè)基于域名的虛擬主機(jī)使用,那么默認(rèn)虛 擬主機(jī)決不會處理發(fā)向這個(gè)地址/端口的請求。如果一個(gè)請求的 Host:頭中包含未知信息,或者干脆就沒有,那么它會被第一 個(gè)基于域名的虛擬主機(jī)(就是在配置文件中首先出現(xiàn)的使用了那個(gè)地址/端 口對的虛擬主機(jī))處理。
您可以用AliasMatch或 RewriteRule來重寫任何 請求,使它指向一個(gè)簡單信息頁面(a single information page)(或腳 本)。
為不同的端口部署 _default_虛擬主機(jī)
與第一種一樣,但我們想讓服務(wù)器偵聽很多端口而第二個(gè) _default_虛擬主機(jī)單獨(dú)偵聽80端口。
服務(wù)器配置
DocumentRoot /www/default80
# ...
DocumentRoot /www/default
# ...

偵聽80端口的默認(rèn)虛擬主機(jī)(必須出現(xiàn)在所有使用通配符端口 的虛擬主機(jī)之前)會捕獲所有發(fā)向一個(gè)沒有指定的IP地址的請求。主服務(wù)器 將不會用于伺服任何請求。
為一個(gè)端口配置 _default_虛擬主機(jī)
如果我們只想在80端口上建立唯一的一個(gè)默認(rèn)虛擬主機(jī),我們應(yīng)該這樣 配置:
服務(wù)器配置
DocumentRoot /www/default
...

發(fā)向一個(gè)未進(jìn)行設(shè)定的地址的80端口的請求將會為這個(gè)虛擬主機(jī)伺服; 而發(fā)向未進(jìn)行設(shè)定的地址的其他端口的請求為主服務(wù)器伺服。
將一個(gè)基于域名的虛擬主機(jī)移植為一個(gè)基于 IP的虛擬主機(jī)
如果一個(gè)具有www.example2.org域名的虛擬主機(jī)(就是基于域名配置示例中的第二個(gè))得到了自己的IP地址。 為了避免一些域名服務(wù)器或代理服務(wù)器在移植期間仍對這個(gè)域名做老的解析, 我們可以采用一種過渡方法:同時(shí)提供新舊兩個(gè)IP地址的解析。
達(dá)到這個(gè)目的很簡單。因?yàn)槲覀冎灰唵蔚陌研碌刂?(172.20.30.50)加入VirtualHost指令就行 了。
服務(wù)器配置
Listen 80
ServerName www.example1.com
DocumentRoot /www/example1
NameVirtualHost 172.20.30.40
DocumentRoot /www/example2
ServerName www.example2.org
# ...
DocumentRoot /www/example3
ServerName www.example3.net
ServerAlias *.example3.net
# ...

現(xiàn)在這個(gè)虛擬主機(jī)就可以用新地址(表現(xiàn)為一個(gè)基于IP的虛擬主機(jī))和 舊地址(表現(xiàn)為一個(gè)基于域名的虛擬主機(jī))同時(shí)進(jìn)行訪問了。
使用ServerPath指令
如果我們在一個(gè)服務(wù)器上運(yùn)行了兩個(gè)基于域名的虛擬主機(jī)。為了匹配正 確的虛擬主機(jī),客戶端必須發(fā)送正確的Host:頭。而舊的使用 HTTP/1.0的客戶端無法發(fā)送這樣的頭,這樣,Apache就無法辨別客戶端想要 連接哪個(gè)虛擬主機(jī)(會用主虛擬主機(jī)來伺服這個(gè)請求)。為了盡量提供向下 兼容性,我們可以可以提供一個(gè)主虛擬主機(jī)來返回一個(gè)頁面,在頁面中加入 指向基于域名的虛擬主機(jī)的URL前綴的鏈接。
Server configuration
NameVirtualHost 172.20.30.40
# primary vhost
DocumentRoot /www/subdomain
RewriteEngine On
RewriteRule ^/.* /www/subdomain/index.html
# ...
DocumentRoot /www/subdomain/sub1
ServerName www.sub1.domain.tld
ServerPath /sub1/
RewriteEngine On
RewriteRule ^(/sub1/.*) /www/subdomain$1
# ...
DocumentRoot /www/subdomain/sub2
ServerName www.sub2.domain.tld
ServerPath /sub2/
RewriteEngine On
RewriteRule ^(/sub2/.*) /www/subdomain$1
# ...

由于ServerPath指令的作用, 發(fā)送到http://www.sub1.domain.tld/sub1/的請求總會 被sub1-vhost所伺服。
如果客戶端發(fā)送了正確的Host:頭,發(fā)送到 http://www.sub1.domain.tld/的請求指揮被sub1-vhost伺服。 如果沒有發(fā)送Host:頭,客戶端會得到從主虛擬主機(jī)發(fā)送的信 息頁面。
請注意,這里還有一點(diǎn)小問題:如果客戶端沒有發(fā)送Host:頭, 發(fā)送到http://www.sub2.domain.tld/sub1/的請求還是會被 sub1-vhost伺服。
RewriteRule指令用以確 保正確發(fā)送了Host:頭的客戶端可以任意使用這兩種URL變量, 比如說:使用或不使用URL前綴。
--------------------------------------------------------------------------------
動機(jī)
如果你的配置文件 httpd.conf 中包含類似下面的許多  部分,并且其中的內(nèi)容都大致相同的話, 你應(yīng)該會對這里所要講的技術(shù)比較感興趣。
NameVirtualHost 111.22.33.44
ServerName www.customer-1.com
DocumentRoot /www/hosts/www.customer-1.com/docs
ScriptAlias /cgi-bin/ /www/hosts/www.customer-1.com/cgi-bin
ServerName www.customer-2.com
DocumentRoot /www/hosts/www.customer-2.com/docs
ScriptAlias /cgi-bin/ /www/hosts/www.customer-2.com/cgi-bin
# blah blah blah
ServerName www.customer-N.com
DocumentRoot /www/hosts/www.customer-N.com/docs
ScriptAlias /cgi-bin/ /www/hosts/www.customer-N.com/cgi-bin

最基本的思想是用動態(tài)的機(jī)制來實(shí)現(xiàn)所有這些靜態(tài)的  配置。這樣做有許多優(yōu)點(diǎn):
配置文件變小,使得 Apache 可以更快的啟動,同時(shí)消耗更少的內(nèi)存。
添加一個(gè)虛擬主機(jī),應(yīng)該只是簡單的在文件系統(tǒng)中創(chuàng)建合適的目錄, 以及配置相關(guān)的 DNS 信息,并且無需重新啟動 Apache。
主要的缺點(diǎn)是你無法針對每個(gè)虛擬主機(jī)用戶使用不同的日志文件。 然而,如果真的在配置有大量虛擬主機(jī)的服務(wù)器上記錄不同的日志文件的話, 很有可能會達(dá)到操作系統(tǒng)所允許的最大文件描述符(file descriptors)的數(shù)量。 更好的辦法是把日志寫到管道(pipe)或者先入先出(fifo)的堆棧, 并啟用其他的進(jìn)程來分發(fā)所得到的日志信息給用戶(同時(shí)也可以做一些歷史紀(jì)錄的統(tǒng)計(jì)等等)。
概要
一個(gè)虛擬主機(jī)有兩部分來定義:一個(gè)是它的 IP 地址, 還有一個(gè)是 HTTP 請求中 Host: 頭的內(nèi)容。 動態(tài)大容量虛擬主機(jī)的技術(shù), 是基于自動在所要返回的文件的路徑中插入相關(guān)信息的想法而實(shí)現(xiàn)的。 使用mod_vhost_alias 可以很容易的實(shí)現(xiàn), 但如果你的 Apache 版本低于 1.3.6 ,則你必須使用 mod_rewrite。 兩者在默認(rèn)情況下都不啟用; 要使用他們,必須在配置和編譯 Apache 的階段聲明啟用(enable)。
我們需要做很多偽裝,才能使動態(tài)虛擬主機(jī)看起來像普通情況。 最重要的一點(diǎn)是 Apache 使用虛擬主機(jī)名字(Server Name)來生成自我參考(self-referential) 的 URLs 等等信息。這是用 ServerName 指令來配置的, 并且可以通過環(huán)境變量 SERVER_NAME 傳遞給 CGI 腳本。 在運(yùn)行時(shí)所實(shí)際使用的值是由指令 UseCanonicalName 的設(shè)置情況來控制的。當(dāng) UseCanonicalName Off 時(shí), 虛擬主機(jī)名字(server name)取自請求中的 Host: 頭的內(nèi)容。 當(dāng) UseCanonicalName DNS 時(shí),則通過 DNS 反解析虛擬主機(jī)的IP 地址得到主機(jī)名字。 以前的做法是用基于名稱的動態(tài)虛擬主機(jī),近來常用基于 IP 地址的虛擬主機(jī)設(shè)置。 如果 Apache 無法決策虛擬主機(jī)名字,則可能是沒有 Host: 頭信息或者 DNS 解析失敗, 遇到這樣的情況,Apache 使用配置 ServerName 時(shí)所填寫的主機(jī)名字。
簡單的動態(tài)虛擬主機(jī)
這是 httpd.conf 文件中,完成和上文 動機(jī) 部分所提到的虛擬主機(jī)一樣效果的配置方法,但這里采用了 mod_vhost_alias 。
# 從 Host: 頭中取得服務(wù)器名字 Server Name
UseCanonicalName Off
# 這里的日志格式,可以在將來通過第一個(gè)參數(shù)域來分隔不同的虛擬主機(jī)的日志
LogFormat "%V %h %l %u %t "%r" %s %b" vcommon
CustomLog logs/access_log vcommon
# 在返回請求的文件名的路徑中包含進(jìn)服務(wù)器名字: server name
VirtualDocumentRoot /www/hosts/%0/docs
VirtualScriptAlias /www/hosts/%0/cgi-bin
將 UseCanonicalName Off 的配置改為 UseCanonicalName DNS 即可實(shí)現(xiàn)基于 IP 地址的虛擬主機(jī)。而在文件路徑中所要插入的服務(wù)器名字(server name) 則通過虛擬主機(jī)的 IP 地址解析而得。
一個(gè)實(shí)際的個(gè)人主頁主機(jī)系統(tǒng)
這里對上面的系統(tǒng)作了一點(diǎn)調(diào)整,便可作為 ISP 的個(gè)人主頁服務(wù)器。 我們使用了略微復(fù)雜的方法,從服務(wù)器名字(Server Name)中提取子字符串, 并插入到文件路徑中。在這個(gè)例子中,www.user.isp.com 的文檔將在 /home/user/ 中定位。并對所有虛擬主機(jī)使用單個(gè) cgi-bin 目錄。
# 所有之前的準(zhǔn)備事項(xiàng)和上面一樣,然后
# 在文件路徑中包含服務(wù)器名字(server name)
VirtualDocumentRoot /www/hosts/%2/docs
# 單個(gè) cgi-bin 目錄
ScriptAlias /cgi-bin/ /www/std-cgi/
更復(fù)雜的關(guān)于 VirtualDocumentRoot 的設(shè)置,可以查閱 mod_vhost_alias 文檔。
在同一個(gè)服務(wù)器上架設(shè)多個(gè)主機(jī)的虛擬系統(tǒng)
更復(fù)雜的設(shè)置,應(yīng)該使用 Apache 的  指令來管理各種虛擬主機(jī)配置的作用域。例如,你可以用一個(gè) IP 地址來給個(gè)人主頁客戶使用, 同時(shí)用下面的配置提供給商業(yè)客戶使用。自然的, 這兩者通過運(yùn)用 結(jié)合到一起。
UseCanonicalName Off
LogFormat "%V %h %l %u %t "%r" %s %b" vcommon
Options FollowSymLinks
AllowOverride All
Options FollowSymLinks
AllowOverride None
ServerName www.commercial.isp.com
CustomLog logs/access_log.commercial vcommon
VirtualDocumentRoot /www/commercial/%0/docs
VirtualScriptAlias /www/commercial/%0/cgi-bin
ServerName www.homepages.isp.com
CustomLog logs/access_log.homepages vcommon
VirtualDocumentRoot /www/homepages/%0/docs
ScriptAlias /cgi-bin/ /www/std-cgi/

更為有效的基于 IP 地址的虛擬主機(jī)
在 第一個(gè)例子 中說過,轉(zhuǎn)為基于 IP 地址的虛擬主機(jī)設(shè)置很容易做到。 但不幸的是,那種做法并不高效,因?yàn)檫@樣會在每次處理請求時(shí),需要查詢 DNS 。 通過在文件系統(tǒng)中包含IP 地址的做法可以避免這樣的問題。這樣一來, 免去了和服務(wù)器名字的關(guān)聯(lián),在日志記錄中也一樣可以用 IP 來分離不同日志。 Apache 將不會為了確定服務(wù)器名字(server name)而去做 DNS 查詢。
# 從 IP 地址反解析得到服務(wù)器名字(server name)
UseCanonicalName DNS
# 在日志中包含 IP 地址,便于后續(xù)分發(fā)
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
使用老版本的 Apache
上面的例子基于 mod_vhost_alias ,但它是在版本 1.3.6 之后才出現(xiàn)的。 如果你的版本比較老,可以通過使用 mod_rewrite 來達(dá)到相同的目的, 如下所示。但只能是基于 Host: 頭方式的虛擬主機(jī)。
此外還須注意日志方面的問題。Apache 1.3.6 是第一個(gè)支持 %V日志格式指令的版本, 在版本 1.3.0 - 1.3.3 中,%v 選項(xiàng)做和 %V 一樣的事情; 而在版本 1.3.4 中沒有等價(jià)指令。在所有的這些版本中,指令 UseCanonicalName 可以出現(xiàn)在 .htaccess 文件中,這意味著客戶的設(shè)置可能會導(dǎo)致日志記錄紊亂。 所以最好的做法是使用 %{Host}i 指令,它可以直接記錄 Host: 頭; 注意,這樣可能在末尾包含 :port ,而使用 %V 則不會這樣。
使用 mod_rewrite 實(shí)現(xiàn)簡單的動態(tài)虛擬主機(jī)
這里的例子摘自 httpd.conf ,效果等同于 第一個(gè)例子中的情況。 前半部分和上面的例子大致相似,只是為了后向兼容 mod_rewrite 作了適當(dāng)修改; 后半部分配置 mod_rewrite 來做實(shí)際的工作。
有些特別的地方需要注意:默認(rèn)情況下,mod_rewrite 在所有其他 URI 轉(zhuǎn)換模塊 (mod_alias 等)之前運(yùn)行,所以如果使用這些模塊的話, mod_rewrite 必須作相應(yīng)的調(diào)整。同時(shí),我們還要為每個(gè)動態(tài)虛擬主機(jī)變些戲法, 使之等效于 ScriptAlias。
# 從 Host: 頭獲取服務(wù)器名字
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
# 接下來是關(guān)鍵部分
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
## 現(xiàn)在處理 CGIs - 我們需要強(qiáng)制使用一個(gè) MIME 類型
RewriteCond %{REQUEST_URI} ^/cgi-bin/
RewriteRule ^/(.*)$ /www/hosts/${lowercase:%{SERVER_NAME}}/cgi-bin/$1 [T=application/x-httpd-cgi]
# 好了!
使用 mod_rewrite 的個(gè)人主頁系統(tǒng)
這里的配置完成和第二個(gè)例子相同的工作。
RewriteEngine on
RewriteMap lowercase int:tolower
# 允許 CGIs 工作
RewriteCond %{REQUEST_URI} !^/cgi-bin/
# 檢查 hostname 正確與否,之后才能使 RewriteRule 起作用
RewriteCond ${lowercase:%{SERVER_NAME}} ^www.[a-z-]+.isp.com$
# 將虛擬主機(jī)名字廉潔到 URI 的開頭
# [C] 表明本次重寫的結(jié)果將在下一個(gè) rewrite 規(guī)則中使用
RewriteRule ^(.+) ${lowercase:%{SERVER_NAME}}$1 [C]
# 現(xiàn)在創(chuàng)建實(shí)際的文件名
RewriteRule ^www.([a-z-]+).isp.com/(.*) /home/$1/$2
# 定義全局 CGI 目錄
ScriptAlias /cgi-bin/ /www/std-cgi/
使用獨(dú)立的虛擬主機(jī)配置文件
這樣的布局利用了 mod_rewrite 的高級特性, 在獨(dú)立的虛擬主機(jī)配置文件中轉(zhuǎn)換。如此可以更為靈活,但需要較為復(fù)雜的設(shè)置。
vhost.map 文件包含了類似下面的內(nèi)容:
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


本文來自ChinaUnix博客,如果查看原文請點(diǎn):http://blog.chinaunix.net/u/16907/showart_249789.html
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP