У меня есть этот маленький файл .htaccess:
RewriteEngine on RewriteRule ^(.*)$ urlroute.php?q=$1 [E=myvariable:'withthisvalue',B,QSA] 
  Направить все запросы на мой скрипт маршрутизации URL.  Он отлично работает, и я могу получить доступ к запрошенному URL-адресу в urlroute.php как $_GET['q'] . 
  Я устанавливаю переменную среды myvariable с помощью mod_rewrite. Я могу получить к ней доступ в urlroute.php как $_SERVER['myvariable'] .  Я не могу получить к нему доступ, используя $_ENV['myvariable'] который кажется странным.  Может ли кто-нибудь объяснить причину? 
  Насколько мне известно, mod_redirect будет добавлять REDIRECT_ к именам переменных среды при выполнении перенаправления (что всегда в моем случае).  Но для меня $_SERVER['myvariable'] как $_SERVER['myvariable'] и $_SERVER['REDIRECT_myvariable'] и настроены на один и тот же контент.  Зачем? 
  См. Этот пост также обсуждает ту же самую функцию.  Механизм перезаписи запускает .htaccess файлов .htaccess в начале каждого цикла, двигатель копирует любые переменные среды в копию REDIRECT_ * .  Следовательно, если для разбора файлов .htaccess требуется 3 цикла, вы также получите файлы REDIRECT_REDIRECT_ * и так далее. 
  Apache 2.3 включает новый флаг [E] но вы можете использовать эту функцию для реализации того же в более ранних версиях: 
 RewriteCond %{ENV:REDIRECT_END} =1 RewriteRule ^ - [L] # other rules ... RewriteRule somepattern somesubst [L,E=END:1] 
AFAIK, эти переменные будут доступны в контексте SERVER , но независимо от того, доступны ли они в среде ENVIRONMENT, зависит от реализации PHP, например Apache + mod_php, Apache + mod_suphp, Apache + mod_fcgi, IIS, …