<-
Apache > HTTP 伺服器 > 文件 > 2.4 版本 > 模組

Apache 模組 mod_setenvif

提供的語言:  en  |  fr  |  ja  |  ko  |  tr 

說明根據要求的特性設定環境變數
狀態基本
模組識別碼setenvif_module
原始檔mod_setenvif.c

摘要

mod_setenvif 模組讓您可以根據請求的不同面向是否與您指定的正規表示式相符,來設定內部環境變數。這些環境變數可用於伺服器的其他部分,來判定是否採取行動,同時也供 CGI 腳本和 SSI 頁面使用。

這些指令會依照其於設定檔內出現的順序來加以考慮。因此,可以使用更複雜的順序,例如此範例,在瀏覽器是 Mozilla 但並非 MSIE 時設定 netscape

BrowserMatch ^Mozilla netscape
BrowserMatch MSIE !netscape

當伺服器透過內部 子請求 來搜尋路徑,例如尋找 DirectoryIndex 或使用 mod_autoindex 產生目錄清單時,不會在子請求中繼承每個請求的環境變數。此外,由於 mod_setenvif 在 API 階段採取行動,因此 SetEnvIf 指令也不會在子請求中個別加以評估。

Support Apache!

指令

錯誤修正檢查表

此外請參閱

top

BrowserMatch 指令

說明設定根據 HTTP User-Agent 的條件式環境變數
語法BrowserMatch 正規表示式 [!]env-variable[=] [[!]env-variable[=]] ...
內容伺服器設定、虛擬主機、目錄、.htaccess
覆寫FileInfo
狀態基本
模組mod_setenvif

BrowserMatchSetEnvIf 指令的特別案例,它根據 User-Agent HTTP 要求標頭設定環境變數。以下兩行程式碼具有相同效果

BrowserMatch Robot is_a_robot
SetEnvIf User-Agent Robot is_a_robot

其他範例

BrowserMatch ^Mozilla forms jpeg=yes browser=netscape
BrowserMatch "^Mozilla/[2-3]" tables agif frames javascript
BrowserMatch MSIE !javascript
top

BrowserMatchNoCase 指令

說明設定環境變數,根據 User-Agent 不區分大小寫
語法BrowserMatchNoCase regex [!]env-variable[=value] [[!]env-variable[=value]] ...
內容伺服器設定、虛擬主機、目錄、.htaccess
覆寫FileInfo
狀態基本
模組mod_setenvif

BrowserMatchNoCase 指令的語意與 BrowserMatch 指令相同。但是,它不區分大小寫。例如:

BrowserMatchNoCase mac platform=macintosh
BrowserMatchNoCase win platform=windows

BrowserMatchBrowserMatchNoCase 指令是 SetEnvIfSetEnvIfNoCase 指令的特別案例。以下兩行程式碼具有相同效果

BrowserMatchNoCase Robot is_a_robot
SetEnvIfNoCase User-Agent Robot is_a_robot
top

SetEnvIf 指令

說明根據要求的屬性設定環境變數
語法SetEnvIf attribute regex [!]env-variable[=value] [[!]env-variable[=value]] ...
內容伺服器設定、虛擬主機、目錄、.htaccess
覆寫FileInfo
狀態基本
模組mod_setenvif

SetEnvIf 指令根據要求的屬性定義環境變數。第一個引數中指定的 attribute 可以是四項中的其中一項

  1. HTTP 要求標頭欄位(請參閱 RFC2616 以取得這些的詳細資訊);例如:HostUser-AgentRefererAccept-Language。可以使用正規表示法指定一系列要求標頭。
  2. 要求中的下列層面之一
    • Remote_Host - 提出要求之客戶端的主機名稱(如果可用)
    • Remote_Addr - 提出要求之客戶端的 IP 位址
    • Server_Addr - 已接收要求之伺服器的 IP 位址(僅限於 2.0.43 之後版本)
    • Request_Method - 使用中方法的名稱(GETPOST等值
    • Request_Protocol - 製作要求中協定的名稱和版本(例如,「HTTP/0.9」、「HTTP/1.1」
    • Request_URI - HTTP 要求列中所要求的資源 - 一般來說,在網址中,這是位在架構和主機部分且不含查詢字串的部分。查看 RewriteCond 指令的 mod_rewrite 以取得如何搭配 QUERY 字串的額外資訊。
  3. 請求相關環境變數清單中的環境變數名稱。這允許 SetEnvIf 指令針對先前比對的結果進行測試。以這種方式進行測試時,只有先前 SetEnvIf[NoCase] 指令定義的環境變數可供使用。「先前」表示這些指令定義在較廣的作用範圍內(例如整個伺服器),或先前在目前的指令範圍內。只有在請求特徵不符,並且沒有使用正規表示法表示屬性時,才會考量環境變數。

第二個參數(regex)是 正規表示法。如果 regex 符合屬性,則會評估其餘參數。

其餘參數會提供要設定的變數名稱,以及可選擇設定的值。這些參數的格式為

  1. varname,或
  2. !varname,或
  3. varname=value

在第一個格式中,值會設定為「1」。如果已定義第二個格式中的變數,則會將其移除,而第三個格式會將變數設定為 value 指定的文字值。自 2.0.51 版開始,Apache httpd 將會辨識 $1..$9 出現在 value 的情況,並將它們替換為 regex 的括號分組子表示式。$0 使你可以存取與該模式配對的整個字串。

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\.example\.com intra_site_referral
    
SetEnvIf object_is_image xbm XBIT_PROCESSING=1
    
SetEnvIf Request_URI "\.(.*)$" EXTENSION=$1

SetEnvIf ^TS  ^[a-z]  HAVE_TS

如果請求的是影像檔案,前三個將設定環境變數 object_is_image,而第四個會在轉介頁位於 www.mydomain.example.com 網站的某個位置時設定 intra_site_referral

最後一個範例會在請求包含任何標頭時設定環境變數 HAVE_TS,這些標頭從「TS」開頭,而其對應值從字元集 [a-z] 開頭。

此外請參閱

top

SetEnvIfExpr 指令

說明根據 ap_expr 式設定環境變數
語法SetEnvIfExpr expr [!]env-variable[=value] [[!]env-variable[=value]] ...
內容伺服器設定、虛擬主機、目錄、.htaccess
覆寫FileInfo
狀態基本
模組mod_setenvif

SetEnvIfExpr 指令根據 定義環境變數。這些式會在執行期間評估,並以與 SetEnvIf 相同的方式在 env-variable 執行,包括反向參考。

    SetEnvIfExpr "tolower(req('X-Sendfile')) == 'd:\images\very_big.iso')" iso_delivered
    SetEnvIfExpr "tolower(req('X-Sendfile')) =~ /(.*\.iso$)/" iso-path=$1

這會在我們的應用程式每次嘗試透過 X-Sendfile 傳送時設定環境變數 iso_delivered

一個更有用的範例會在遠端 IP 位址根據 RFC 1918 是私有位址時設定變數 rfc1918。

SetEnvIfExpr "-R '10.0.0.0/8' || -R '172.16.0.0/12' || -R '192.168.0.0/16'" rfc1918

此外請參閱

top

SetEnvIfNoCase 指令

說明根據請求的屬性設定環境變數,不區分大小寫
語法SetEnvIfNoCase 屬性正規表示法 [!]env-變數[=] [[!]env-變數[=]] ...
內容伺服器設定、虛擬主機、目錄、.htaccess
覆寫FileInfo
狀態基本
模組mod_setenvif

SetEnvIfNoCase 指令在語義上與 SetEnvIf 指令相同,它們的差別僅在於正規表示法比對時不區分大小寫。例如:

SetEnvIfNoCase Host Example\.Org site=example

如果 HTTP 請求標頭欄位 Host: 已包含並包含 Example.Orgexample.org 或任何其他組合,site 環境變數將設定為「example」。

提供的語言:  en  |  fr  |  ja  |  ko  |  tr 

top

留言

注意事項
此區不提供問答服務。請把提出的意見用於改善說明文件或伺服器。如果已執行某些意見,或被視為無效/離題,我們的管理員可能會將其移除。有關 Apache HTTP Server 管理問題,請洽詢我們的 IRC 頻道 #httpd(在 Libera.chat 上),或將問題寄送給我們的 郵件通訊串列