Apache HTTP Server 版本2.2
說(shuō)明 | 根據(jù)客戶(hù)端請(qǐng)求頭字段設(shè)置環(huán)境變量 |
---|---|
狀態(tài) | 基本(B) |
模塊名 | setenvif_module |
源文件 | mod_setenvif.c |
mod_setenvif
模塊允許根據(jù)請(qǐng)求的不同方面匹配指定的正則表達(dá)式來(lái)設(shè)置環(huán)境變量。這些環(huán)境變量可由服務(wù)器的其他部分使用。
指令按照他們?cè)谂渲梦募谐霈F(xiàn)的順序生效。所以可以使用更多的復(fù)合序列,正如下例所示,如果瀏覽器是mozilla而非MSIE則會(huì)設(shè)置netscape
。
BrowserMatch ^Mozilla netscape
BrowserMatch MSIE !netscape
說(shuō)明 | 基于User-Agent頭有條件地設(shè)置環(huán)境變量 |
---|---|
語(yǔ)法 | BrowserMatch regex [!]env-variable[=value] [[!]env-variable[=value]] ... |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項(xiàng) | FileInfo |
狀態(tài) | 基本(B) |
模塊 | mod_setenvif |
BrowserMatch
只是SetEnvIf
的一種特殊情況,基于User-Agent
頭有條件地設(shè)置環(huán)境變量。下面的兩行具有相同的效果:
BrowserMatchNoCase Robot is_a_robot
SetEnvIfNoCase User-Agent Robot is_a_robot
更多的例子:
BrowserMatch ^Mozilla forms jpeg=yes browser=netscape
BrowserMatch "^Mozilla/[2-3]" tables agif frames javascript
BrowserMatch MSIE !javascript
說(shuō)明 | 基于不區(qū)分大小寫(xiě)的User-Agent頭有條件地設(shè)置環(huán)境變量 |
---|---|
語(yǔ)法 | BrowserMatchNoCase regex [!]env-variable[=value] [[!]env-variable[=value]] ... |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項(xiàng) | FileInfo |
狀態(tài) | 基本(B) |
模塊 | mod_setenvif |
BrowserMatchNoCase
等同于BrowserMatch
,僅僅是進(jìn)行不區(qū)分大小寫(xiě)的匹配。例如:
BrowserMatchNoCase mac platform=macintosh
BrowserMatchNoCase win platform=windows
BrowserMatch
和BrowserMatchNoCase
只是SetEnvIf
和SetEnvIfNoCase
的一種特殊情況。下面的兩行具有相同的效果:
BrowserMatchNoCase Robot is_a_robot
SetEnvIfNoCase User-Agent Robot is_a_robot
說(shuō)明 | 根據(jù)客戶(hù)端請(qǐng)求屬性設(shè)置環(huán)境變量 |
---|---|
語(yǔ)法 | SetEnvIf attribute regex [!]env-variable[=value] [[!]env-variable[=value]] ... |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項(xiàng) | FileInfo |
狀態(tài) | 基本(B) |
模塊 | mod_setenvif |
SetEnvIf
指令根據(jù)客戶(hù)端的請(qǐng)求屬性設(shè)置環(huán)境變量。第一個(gè)參數(shù)attribute必須是下列三種類(lèi)別之一:
Host
, User-Agent
, Referer
, Accept-Language
。可以用一個(gè)正則表達(dá)式來(lái)進(jìn)行匹配。Remote_Host
遠(yuǎn)程主機(jī)名(若可用)Remote_Addr
遠(yuǎn)程主機(jī)IP地址Server_Addr
接收到請(qǐng)求的服務(wù)器IP地址(2.0.43及以后版本)Request_Method
所用的請(qǐng)求方法(GET
, POST
等等)Request_Protocol
請(qǐng)求所使用的協(xié)議及其版本("HTTP/0.9", "HTTP/1.0", "HTTP/1.1"等)Request_URI
在HTTP請(qǐng)求行中請(qǐng)求的資源(通常是URL中去除協(xié)議、主機(jī)以及查詢(xún)字符串后剩余的部分)。SetEnvIf
指令基于預(yù)先匹配的結(jié)果進(jìn)行測(cè)試。只有那些由較早的SetEnvIf[NoCase]
指令定義的環(huán)境變量才可以按照這種方式測(cè)試。"較早的"意思是它們?cè)诟蠈拥淖饔糜?比如全局范圍)中被定義或者在同一作用域中較早出現(xiàn)。只有在請(qǐng)求的屬性未能得到匹配并且attribute沒(méi)有使用正則表達(dá)式的時(shí)候,環(huán)境變量才會(huì)被考慮。第二個(gè)參數(shù)regex是一個(gè)Perl兼容的正則表達(dá)式。如果regex是根據(jù)attribute進(jìn)行匹配的,那么剩余的參數(shù)將被評(píng)估。剩余的參數(shù)給出了需要設(shè)置的變量名及其可選的值。格式如下:
varname
!varname
varname=value
第一個(gè)格式,環(huán)境變量varname
的值將設(shè)為"1"。第二個(gè)格式將刪除給定的變量varname
(若存在)。第三個(gè)格式將為環(huán)境變量varname
設(shè)置value
的字面值。從2.0.51版開(kāi)始,Apache能夠識(shí)別value中出現(xiàn)的$1
..$9
,并將其替換為regex中對(duì)應(yīng)的使用括號(hào)括起來(lái)的子模式。
SetEnvIf Request_URI "\.gif$" object_is_image=gif
SetEnvIf Request_URI "\.jpg$" object_is_image=jpg
SetEnvIf Request_URI "\.xbm$" object_is_image=xbm
:
SetEnvIf Referer www\.mydomain\.com intra_site_referral
:
SetEnvIf object_is_image xbm XBIT_PROCESSING=1
:
SetEnvIf ^TS* ^[a-z].* HAVE_TS
前面的三個(gè)將會(huì)設(shè)置object_is_image
環(huán)境變量(如果請(qǐng)求的是圖片)。第四個(gè)將會(huì)設(shè)置intra_site_referral
環(huán)境變量(如果Referer頭表明來(lái)自于www.mydomain.com
)。
最后一個(gè)將會(huì)設(shè)置環(huán)境變量HAVE_TS
(如果包含任何以"TS"開(kāi)始的請(qǐng)求頭,并且該請(qǐng)求頭的值是以小寫(xiě)字母[a-z]開(kāi)頭的)。
說(shuō)明 | 根據(jù)大小寫(xiě)無(wú)關(guān)的客戶(hù)端請(qǐng)求屬性設(shè)置環(huán)境變量 |
---|---|
語(yǔ)法 | SetEnvIfNoCase attribute regex [!]env-variable[=value] [[!]env-variable[=value]] ... |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項(xiàng) | FileInfo |
狀態(tài) | 基本(B) |
模塊 | mod_setenvif |
SetEnvIfNoCase
等同于SetEnvIf
,僅僅是進(jìn)行不區(qū)分大小寫(xiě)的匹配。例如:
SetEnvIfNoCase Host Apache\.Org site=apache
這會(huì)將環(huán)境變量site
設(shè)置為"apache
"(如果"Host:
"請(qǐng)求頭包含"Apache.Org
"、"apache.org
"等大小寫(xiě)變體)。