Доступ к переменным окружения, установленным с помощью mod_rewrite в PHP - PullRequest
2 голосов
/ 06 февраля 2012

У меня есть маленький файл .htaccess:

RewriteEngine on
RewriteRule ^(.*)$ urlroute.php?q=$1 [E=myvariable:'withthisvalue',B,QSA]

Чтобы перенаправить все запросы в мой скрипт маршрутизации URL.Это прекрасно работает, и я могу получить доступ к запрошенному URL в urlroute.php как $_GET['q'].

Я устанавливаю переменную окружения myvariable, используя mod_rewrite.*.Я не могу получить к нему доступ, используя $_ENV['myvariable'], что кажется странным.Может кто-нибудь объяснить, в чем причина?

Насколько мне известно, mod_redirect добавит REDIRECT_ к именам переменных среды при выполнении перенаправления (что всегда происходит в моем случае).Но для меня и $_SERVER['myvariable'], и $_SERVER['REDIRECT_myvariable'] доступны и настроены на одно и то же содержимое.Почему?

1 Ответ

4 голосов
/ 06 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...