有兩種環境變數會影響Apache HTTP Server。
首先,存在由底層作業系統控制的環境變數。這些是在伺服器啟動之前設定的。它們可以在設定檔的擴充功能中使用,也可以使用PassEnv指令傳遞給CGI腳本和SSI。 ( 建議學習:Apache伺服器 )
其次,Apache HTTP Server提供了一種機制,用於在命名變數中儲存訊息,這些變數也稱為環境變數。此資訊可用於控制各種操作,如日誌記錄或存取控制。變數也用作與外部程式(如CGI腳本)通訊的機制。本文將討論了操作和使用這些變數的不同方法。
儘管這些變數稱為環境變量,但它們與底層作業系統控制的環境變數不同。相反,這些變數在內部Apache結構中儲存和操作。
它們僅在提供給CGI腳本和伺服器端包含腳本時才成為實際的作業系統環境變數。如果您希望操作伺服器本身運行的作業系統環境,則必須使用作業系統shell提供的標準環境操作機制。
設定環境變數
基本環境操作
在Apache中設定環境變數的最基本方法是使用無條件的SetEnv指令。也可以使用PassEnv指令從啟動伺服器的shell環境傳遞變數。
有條件的每個請求設定
為了提高靈活性,mod_setenvif提供的指令允許在每個請求的基礎上設定環境變量,具體取決於特定請求的特徵。
例如,只有在特定瀏覽器(用戶代理)發出請求時,或僅在找到特定的Referer [sic]標頭時才能設定變數。透過mod_rewrite的RewriteRule可以獲得更大的靈活性,它使用[E = ...]選項來設定環境變數。
唯一識別碼最後,mod_unique_id將每個請求的環境變數UNIQUE_ID設定為一個值,該值在非常特定的條件下保證在「所有」請求中是唯一的。
標準CGI變數
除了在Apache配置中設定並從shell傳遞的所有環境變數之外,CGI腳本和SSI頁面還提供了一組環境變量,其中包含有關CGI規範所要求的請求的元資訊。
一些警告
使用環境操作指令無法覆寫或變更標準CGI變數。
當suexec用於啟動CGI腳本時,在啟動CGI腳本之前,環境將被清除為一組安全變數。安全變數清單在suexec.c中的編譯時定義。
出於可移植性的原因,環境變數的名稱可能只包含字母,數字和底線字元。另外,第一個字元可能不是數字。傳遞給CGI腳本和SSI頁面時,與此限制不符的字元將被下劃線取代。
一個特殊情況是HTTP標頭,它透過環境變數傳遞給CGI腳本等(見下文)。它們被轉換為大寫,只有短劃線被替換為下劃線;如果標頭包含任何其他(無效)字符,則會以靜默方式刪除整個標頭。
SetEnv指令在請求處理期間運行較晚,這表示SetEnvIf和RewriteCond等指令不會看到使用它設定的變數。
當伺服器透過內部子請求尋找路徑(例如尋找DirectoryIndex或使用mod_autoindex產生目錄清單)時,子請求中不會繼承每個請求的環境變數。此外,由於mod_setenvif採取行動的API階段,因此不會在子請求中單獨評估SetEnvIf指令。
以上是Apache怎麼設定環境變數的詳細內容。更多資訊請關注PHP中文網其他相關文章!