Это просто странно.
Я добавил следующее в .htaccess
файл:
RewriteRule ^a-file-on-the-server$ index.php [E=let_me_in:test]
И в моем PHP-скрипте у меня есть следующее:
print_r($_ENV);
... который распечатывает все переменные среды.
Когда я иду в mydomain.com/a-file-on-the-server
, Я получаю вывод:
Array ( [DOCUMENT_ROOT] => ******** [GATEWAY_INTERFACE] => CGI/1.1 [HTTP_ACCEPT] => application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 [HTTP_ACCEPT_CHARSET] => ISO-8859-1,utf-8;q=0.7,*;q=0.3 [HTTP_ACCEPT_ENCODING] => gzip,deflate,sdch [HTTP_ACCEPT_LANGUAGE] => en-US,en;q=0.8 [HTTP_CACHE_CONTROL] => max-age=0 [HTTP_CONNECTION] => keep-alive [HTTP_COOKIE] => ******** [HTTP_HOST] => ******** [HTTP_USER_AGENT] => Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4 [PATH] => /bin:/usr/bin [QUERY_STRING] => [REDIRECT_STATUS] => 200 [REMOTE_ADDR] => ******** [REMOTE_PORT] => 36345 [REQUEST_METHOD] => GET [REQUEST_URI] => ******** [SCRIPT_FILENAME] => ******** [SCRIPT_NAME] => ******** [SERVER_ADDR] => ******** [SERVER_ADMIN] => ******** [SERVER_NAME] => ******** [SERVER_PORT] => 80 [SERVER_PROTOCOL] => HTTP/1.1 [SERVER_SIGNATURE] => [SERVER_SOFTWARE] => Apache [UNIQUE_ID] => ******** )
Как видите, переменная среды не отображается. Что я делаю не так?
Единственное, что выглядит неправильно, - это используемое вами регулярное выражение. Помните, что регулярное выражение соответствует всему URI запроса, который всегда начинается с /
. То, как вы это написали, будет соответствовать только в том случае, если запрос начинается с a-file...
чего никогда не будет.
Попробуйте использовать это вместо этого (я только добавил /
после ^
):
RewriteRule ^/a-file-on-the-server$ index.php [E=let_me_in:test]
Могут быть и другие части вашего правила, которые не подходят, но у меня нет большого опыта работы с переменными окружения.
Я столкнулся с этой проблемой сегодня, выполняя некоторую работу с Apache mod_rewrite. Проблема в том, что PHP помещает переменную среды, определенную как часть правила перезаписи, в $ _SERVER, а не в $ _ENV (и изменяет имя переменной env).
Включая RewriteRule, например
RewriteRule ^a-file-on-the-server$ index.php [E=let_me_in:test]
в моей настройке (CentOS6 с Apache 2.2.15 и PHP 5.3.3) будет предоставлять переменную как $ _SERVER ['REDIRECT_LET_ME_IN'], так что index.php с содержимым:
<?php
print_r($_SERVER['REDIRECT_LET_ME_IN']);
?>
отобразит текст:
test
Я использовал вызов функции phpinfo (), чтобы исследовать эту проблему и рекомендовать ее для просмотра всех доступных пар ключ / значение $ _ENV и $ _SERVER во время отладки.
эй, я провожу тест, и при установке env var,
Я делаю то, что вам нравится [E = переменная: значение, другой флаг / значение, (..)]
и в моем файле php я вижу эти настройки НДС в $ _SERVER ['variable']
вы можете захотеть получить свой var вот так:
эхо $ _SERVER ['let_me_in'];
выходной тест.