Apache Docs zamówienie error.html obejmuje zmiennych środowiskowych przekazywanych do obsługi błędów strony
mówi „zmienne środowiskowe REDIRECT_ są tworzone ze zmiennych środowiskowych, które istniały przed przekierowaniem. Są one przemianowane z prefiks REDIRECT_, tj. HTTP_USER_AGENT
staje się REDIRECT_HTTP_USER_AGENT
. "
Mówi "Żadne z nich nie zostanie ustawione, jeśli docelowy obiekt ErrorDocument jest przekierowaniem zewnętrznym (cokolwiek zaczynającego się od nazwy schematu, np. Http :, nawet jeśli odnosi się do tego samego hosta, co serwer)."
Mówi o SetEnv: "Wewnętrzne zmienne środowiskowe ustawione przez tę dyrektywę są ustawione po uruchomieniu większości dyrektyw przetwarzania wczesnego żądania, takich jak kontrola dostępu i odwzorowywanie URI do nazwy pliku. jako wejście do tej wczesnej fazy przetwarzania, takiej jak dyrektywa RewriteRule, należy zamiast tego ustawić zmienną środowiskową za pomocą SetEnvIf. "
Na niektórych serwerach, zmienne środowiskowe zadeklarowane przez użytkownika musi zaczynać się od „HTTP_” dla celów bezpieczeństwa, np: SetEnv HTTP_MY_VARIABLE "my value"
Oto kilka .htaccess sposoby ustalania i za pomocą zmiennych środowiskowych serwera, zaczerpnięte z mojego modyfikując psujących się Prasa 5G Blacklist/Firewall http://perishablepress.com/5g-blacklist-2013/ użyć zmiennej środowiskowej sprawozdawczym:
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>
Zauważ użycie paramters, np 0 USD -% 1 -% 2. % 0 daje pełny łańcuch,% 1 daje dopasowanie z 1. instrukcji nawiasów,% 2 drugiej. Łączniki są dosłownymi znakami, aby wizualnie oddzielić wyniki parametrów (nie myśl, że można w nich umieścić spacje).
Oto niektóre metody PHP dostępu do zmiennych środowiskowych (w moim przypadku z 403.php i 404.php). pamiętać, że nie patrzę w phpinfo(), ale w $ Server oraz, że zmienne się prefiksem przekierować Należy również zauważyć, że z 403/404 przekierowania, QUERY_STRING staje REDIRECT_QUERY_STRING To rzeczy, które mogłyby łatwo zależy od serwera, więc sprawdź wartość $ _SERVER dla rzeczywistych wartości.Na przykład,
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");
}
omówię w pewnej głębokości w http://lcblog.lernerconsult.com/2013-server-alert-you-file-not-found-errors/
Czy na pewno pliki .htaccess są włączone dla tego konkretnego katalogu? spróbuj innej dyrektywy, której efekt można łatwo zweryfikować. – goat
czy to inne pytanie z SO mogłoby ci pomóc? http://stackoverflow.com/questions/3780866/why-is-my-env-empty – luchosrock