2012-01-08 44 views

回答

28

您只能從的.htaccess設置環境變量:

SetEnv MYVAR whatever 

而且$_SERVER陣列在此可用:

print $_SERVER["MYVAR"]; 

所以,不完全是一個全局變量。但對於某些目的仍然有用。

(另一個選擇是聲明一個auto_prepend_file預先定義的變量。但是,這更多的是解決辦法呢。)

+0

+1我學到了一些新東西。在什麼情況下從.htaccess文件設置環境變量是一種好的做法? – Josh 2012-01-08 20:57:38

+0

我主要使用這個來聲明資源/路徑名。但最終,任何可以被認爲是全球網站設置的東西都可以。 – mario 2012-01-08 21:07:58

+0

謝謝,馬里奧。我很欣賞這種見解。 – Josh 2012-01-08 21:10:39

6

可以在.htaccess(或http.conf)設置環境變量:

SetEnv foo bar 

,如果你想從$ _GET數組變量訪問通過

$_ENV['foo'] 
3

訪問它們在PHP(這將覆蓋任何發送到服務器的變量,通過獲取)

RewriteCond %{QUERY_STRING} ^(.*)$ 
RewriteRule ^(.*)$ $1?%1&myvar=something 

%1無論

+2

您可能想在前面添加'RewriteCond%{QUERY_STRING}!myvar'以防止無限循環。 – Gerben 2012-01-09 18:11:24

1

我使用環境變量來告訴我是什麼「5G黑名單」防火牆腳本http://perishablepress.com/5g-blacklist-2013/的一部分是由一個卑鄙小人

例如,防火牆的一部分觸發的查詢字符串可能停止最常見的垃圾郵件發送者查詢字符串:

RewriteBase/
RewriteCond %{QUERY_STRING} (\"|%22).*(<|>|%3) [NC,OR] 
RewriteCond %{QUERY_STRING} (javascript:).*(\;) [NC,OR] 
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3) [NC,OR] 
RewriteCond %{QUERY_STRING} (\\|\.\./|`|=\'$|=%27$) [NC,OR] 
RewriteCond %{QUERY_STRING} (\;|\'|\"|%22).*(union|select|insert|drop|update|md5|benchmark|or|and|if) [NC,OR] 
RewriteCond %{QUERY_STRING} (base64_encode|localhost|mosconfig) [NC,OR] 
RewriteCond %{QUERY_STRING} (boot\.ini|echo.*kae|etc/passwd) [NC,OR] 
RewriteCond %{QUERY_STRING} (GLOBALS|REQUEST)(=|\[|%) [NC] 
RewriteRule .* - [E=BadQueryString,F] 

請參閱E = BadQueryString?我補充說。當然語法必須精確。

然後在我處理403 PHP程序:權限被拒絕的錯誤,我用這種方式(注意這臺服務器的預規劃「REDIRECT_」環境變量名):

if (getenv("REDIRECT_BadQueryString") !== FALSE) { 
    $htaccessErrors .= ' BadQueryString'; 
    if (getenv("REDIRECT_QUERY_STRING") !== FALSE) { 
    $htaccessErrors .= getenv("REDIRECT_QUERY_STRING"); 
    }  
} 

這裏是另一個例子的.htaccess ,測試用戶代理服務器變量並使用環境變量(如果已設置),然後環境變量可用於我的403.php

SetEnvIfNoCase User-Agent (binlar|casper|cmsworldmap|comodo|diavol|dotbot|feedfinder|flicky|ia_archiver|kmccrew|nutch|planetwork|purebot|pycurl|skygrid|sucker|turnit|vikspider|zmeu) BadUserAgent 
<limit GET POST PUT> 
Order Allow,Deny 
Allow from all 
Deny from env=BadUserAgent 
</limit> 
相關問題