2011-07-04 66 views
42

我想在Apache服務器的配置文件httpd.conf中定義一個變量。如何在apache的httpd.conf文件中定義一個變量?

例:變量static_path = C:\codebase\snp_static

,我想在那裏曾經要求httpd.conf使用這個變量(static_path)。

請告訴我如何在httpd.conf文件中定義一個變量?

+1

檢查響應例如:http://stackoverflow.com/questions/6343621/conditions-in-apache/6346407#6346407 – regilero

回答

3

如果你想要的只是httpd.conf中的簡單變量替換,那麼爲運行Apache的用戶定義一個普通的shell環境變量,然後使用$ {ENVVAR}語法在httpd.conf文件中引用它,看到Apache docs

89

的httpd.conf,聲明你的變量(S)與:Define(最好在第一行)
語法Definevariable-namevariable-value

這樣:

#The line below creates the variable [static_path] 
Define static_path C:/codebase/snp_static 

以後,您可以使用這個變量,像這樣:

ServerRoot = ${static_path} 
... 
DocumentRoot = ${static_path} 
... 
<Directory ${static_path}> 
...etc. 

你甚至可以將多個變量:

#Below, I am going to combine variables [server_space] and [static_path] 
Define server_space c:/ 
Define static_path codebase/snp_static 
... 
ServerRoot = ${server_space}${static_path} 
... 
DocumentRoot = ${server_space}${static_path} 
... 
<Directory ${server_space}${static_path}> 
...etc. 

文檔http://httpd.apache.org/docs/2.4/mod/core.html#define

+7

mod_define默認情況下不包含在Apache 2.2中 – craigrs84

+1

舊的原件(與2.0和2.2兼容) mod_define在http://people.apache.org/~rjung/mod_define/mod_define.html – reallynice

+1

這絕對是在httpd conf文件中定義變量的理想方式。我確實希望apachectl的人們偶然發現這個問題。 –

1

Apache2.4我研究了它,這裏是對我有用。 和使用httpd_z.exe -t -D DUMP_RUN_CFG

RESULTS::: 
    ServerRoot: "C:/path/core/apache2" 
    Main DocumentRoot: "C:/path/apache/htdocs" 
    Main ErrorLog: "C:/path/core/apache2/logs/error.log" 
    Mutex rewrite-map: using_defaults 
    Mutex default: dir="C:/path/core/apache2/logs/" mechanism=default 
    PidFile: "C:/path/core/apache2/logs/httpd.pid" 
    Define: DUMP_RUN_CFG 
    Define: US_ROOTF=C:/path **THIS IS THE ROOT PATH VARIABLE I JUST MADE** 
    Define: php54 


    #<IfDefine TEST> 
    # Define servername test.example.com 
    #</IfDefine> 
    #<IfDefine !TEST> 
    # Define servername www.example.com 
    # Define SSL 
    #</IfDefine> 
    #DocumentRoot /var/www/${servername}/htdocs 
<IfDefine US_ROOTF> 
Define US_ROOTF C:/PATH **The path i want the variable for** 
</IfDefine> 
<IfDefine !US_ROOTF> 
Define US_ROOTF C:/PATH **The path i want the variable for** 
# Define SSL 
</IfDefine> 
#DocumentRoot /var/www/${servername}/htdocs OPTIONS ON HOW TO USE 

EXAMPLE of use 
ServerRoot = ${US_ROOTF} 
<IfDefine php54> 
    LoadFile "${US_ROOTF}/core/php54/icudt53.dll" 
PHPIniDir "${US_ROOTF}/core/php54/php_production.ini" 

有人告訴我從來沒有服事到互聯網時使用直接硬路徑任何總是使用變量來幫助保護您的系統進行測試。

我發現這是如此真實的難題。現在我終於想出瞭如何爲所有使用Apache的服務設置變量。

希望它可以幫助你。

+0

從管理的角度來看,當你需要刪除舊路徑時,它使得使用變量更新和維護服務器變得更容易,而不是在http.conf的每一行(以及任何其他地方適用)以及安全性(適用時) – Omar

相關問題