Доступ к переменным среды, установленным с помощью mod_rewrite в PHP

У меня есть этот маленький файл .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'] и настроены на один и тот же контент. Зачем?

Solutions Collecting From Web of "Доступ к переменным среды, установленным с помощью mod_rewrite в PHP"

См. Этот пост также обсуждает ту же самую функцию. Механизм перезаписи запускает .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, …