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