2012-01-08 13 views

risposta

28

È possibile impostare solo una variabile di ambiente da .htaccess:

SetEnv MYVAR whatever 

E questo diventa disponibile nella matrice $_SERVER:

print $_SERVER["MYVAR"]; 

Quindi, non è esattamente una variabile globale. Ma ancora utile per alcuni scopi.

(L'altra opzione è che dichiara un auto_prepend_file di pre-definire le variabili. Ma che è più una soluzione, allora.)

+0

+1 Ho imparato qualcosa di nuovo. In quali casi è buona pratica impostare una variabile d'ambiente dal file .htaccess? – Josh

+0

Lo uso principalmente per dichiarare nomi di risorse/percorsi. Ma alla fine tutto ciò che potrebbe essere considerato un sito globale è ok. – mario

+0

Grazie, Mario. Apprezzo l'intuizione. – Josh

6

È possibile impostare le variabili di ambiente in .htaccess (o http.conf):

SetEnv foo bar 

e accedervi in ​​PHP tramite

$_ENV['foo'] 
3

se si desidera che la variabile accessibile dal array $ _GET (questa volontà sovrascrivere qualsiasi variabile inviata al server tramite get)

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

% 1 qualunque sia la stringa di query potrebbe essere

+2

Si potrebbe voler aggiungere 'RewriteCond% {QUERY_STRING}! Myvar' in primo piano per prevenire un loop infinito. – Gerben

1

Sto usando le variabili di ambiente di dirmi quale parte del "5G Blacklist" script di firewall http://perishablepress.com/5g-blacklist-2013/ viene innescato da un sacco di merda

Per esempio, una parte del firewall blocca le stringhe di query dello spammer più comuni:

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] 

Vedi che E = BadQueryString? L'ho aggiunto. La sintassi, naturalmente, deve essere precisa.

Poi nel mio programma PHP per la gestione di 403: Permesso negato errori, lo uso in questo modo (notare questo antepone del server "REDIRECT_" per il nome della variabile ambiente):

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

Ecco un altro esempio .htaccess , testare la variabile del server User-Agent e utilizzare la variabile di ambiente se era impostata e quindi la variabile di ambiente è disponibile nel mio 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> 
Problemi correlati