Apache Docs su misura error.html copre variabili d'ambiente passati alla gestione degli errori pagine
dice "variabili d'ambiente REDIRECT_ vengono create dalle variabili d'ambiente che esistevano prima del reindirizzamento. Essi vengono rinominati con un prefisso REDIRECT_, ovvero, HTTP_USER_AGENT
diventa REDIRECT_HTTP_USER_AGENT
. "
Says "Nessuno di questi verrà impostato se il target ErrorDocument è un reindirizzamento esterno (qualsiasi cosa che inizi con un nome di schema come http :, anche se si riferisce allo stesso host del server)."
dice di SetEnv: "sono impostate le variabili d'ambiente interne stabilite dalla presente direttiva direttive di elaborazione richiesta dopo più presto vengono eseguiti, come il controllo degli accessi e URI-to-filename mappatura Se la variabile d'ambiente si sta impostando è destinata. come input in questa prima fase di elaborazione come la direttiva RewriteRule, dovresti invece impostare la variabile d'ambiente con SetEnvIf. "
Su alcuni server, variabili d'ambiente dall'utente dichiarato devono iniziare con 'HTTP_' per motivi di sicurezza, ad esempio: SetEnv HTTP_MY_VARIABLE "my value"
Ecco alcuni modi .htaccess di impostazione e l'utilizzo delle variabili di ambiente del server, preso dal mio modificare la deperibili Press 5G Blacklist/Firewall http://perishablepress.com/5g-blacklist-2013/ da usare l'ambiente di reporting variabile:
SetEnv myServerName %{SERVER_NAME}
RewriteCond %{QUERY_STRING} (base64_encode|localhost|mosconfig|open_basedir) [NC,OR]
RewriteCond %{QUERY_STRING} (boot\.ini|echo.*kae|etc/passwd) [NC,OR]
RewriteCond %{QUERY_STRING} (GLOBALS|REQUEST)(=|\[|%) [NC]
RewriteRule .* - [E=badQueryString:%0--%1--%2,F,L]
SetEnvIfNoCase User-Agent ^$ noUserAgent
SetEnvIfNoCase User-Agent (binlar|casper|cmsworldmap|comodo|diavol|dotbot|feedfinder|flicky|ia_archiver|jakarta|kmccrew|nutch|planetwork|purebot|pycurl|skygrid|sucker|turnit|vikspider|zmeu) badUserAgent=$1
<limit GET POST PUT>
Order Allow,Deny
Allow from all
Deny from env=badUserAgent
</limit>
Avviso l'uso di paramters, ad esempio, $ 0 - 1% - 2%. % 0 fornisce la stringa completa,% 1 dà la corrispondenza della prima istruzione tra parentesi,% 2 la seconda. I trattini sono caratteri di visualizzazione letterali, per separare visivamente i risultati dei parametri (non pensare che sia un modo per inserire spazi all'interno).
Ecco alcuni metodi PHP per accedere alle variabili di ambiente (nel mio caso da 403.php e 404.php). Si noti che non si guarda in phpinfo(), ma in $ SERVER, e che le variabili ottiene con prefisso REDIRECT Si noti inoltre che con un 403/404 reindirizzamento, il QUERY_STRING diventa REDIRECT_QUERY_STRING Questa è roba che potrebbe facilmente dipende dal server, quindi controlla $ _SERVER per i tuoi valori effettivi.Ad esempio,
if (getenv("HTTP_REFERER") !== FALSE) {
$httpref = getenv("HTTP_REFERER");
} else {
$httpref = '';
}
if (isset($_SERVER['REDIRECT_STATUS'])) {
$status = $_SERVER['REDIRECT_STATUS'];
} else {
$status = '';
}
if (isset($_SERVER['REMOTE_HOST'])) {
$remoteHost = $_SERVER['REMOTE_HOST'];
} else {
$remoteHost = '';
}
if (isset($_SERVER['REDIRECT_QUERY_STRING'])) {
$querystring = $_SERVER['REDIRECT_QUERY_STRING'];
} else {
$querystring = '';
}
if (isset($_SERVER['REDIRECT_noUserAgent'])) {
$htaccessErrors[] = 'NoUserAgent';
}
if (getenv("REDIRECT_badQueryString") !== FALSE) {
/* must exactly match what shows up in $_SERVER, is case sensitive (e.g. badQueryString not BadQueryString) */
$htaccessErrors[] = 'badQueryString:'.getenv("REDIRECT_badQueryString");
}
copro in profondità nel http://lcblog.lernerconsult.com/2013-server-alert-you-file-not-found-errors/
Sei sicuro i file .htaccess sono attivati per quella specifica directory? prova un'altra direttiva il cui effetto è facilmente verificabile. – goat
questa altra domanda SO ti può aiutare? http://stackoverflow.com/questions/3780866/why-is-my-env-empty – luchosrock