У меня есть этот маленький файл .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, …