C'è un modo per impostare una variabile personalizzata da .htaccess
in modo che ogni script php possa quindi leggere da esso? Sono andato a cercare su Google.Come impostare un global personalizzato da .htaccess
Grazie!
C'è un modo per impostare una variabile personalizzata da .htaccess
in modo che ogni script php possa quindi leggere da esso? Sono andato a cercare su Google.Come impostare un global personalizzato da .htaccess
Grazie!
È 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.)
ne dite di usare qualcosa come mod_setenvif? Ulteriori dettagli disponibili su http://httpd.apache.org/docs/current/env.html.
È possibile impostare le variabili di ambiente in .htaccess
(o http.conf
):
SetEnv foo bar
e accedervi in PHP tramite
$_ENV['foo']
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
Si potrebbe voler aggiungere 'RewriteCond% {QUERY_STRING}! Myvar' in primo piano per prevenire un loop infinito. – Gerben
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>
+1 Ho imparato qualcosa di nuovo. In quali casi è buona pratica impostare una variabile d'ambiente dal file .htaccess? – Josh
Lo uso principalmente per dichiarare nomi di risorse/percorsi. Ma alla fine tutto ciò che potrebbe essere considerato un sito globale è ok. – mario
Grazie, Mario. Apprezzo l'intuizione. – Josh