Я пытаюсь установить переменные среды Apache (для использования в PHP) с [E=VAR:VAL]
флаг на RewriteRule управляет в .htaccess файле.
Я уже обнаружил, что к переменным получают доступ в PHP как серверные переменные $_SERVER
вместо $_ENV
(который делает определенное количество смысла). Однако моя проблема для некоторых правил [E=VAR:VAL]
отметьте работы как ожидалось, и я заканчиваю с переменной $_SERVER['VAR']
но для других правил я заканчиваю переменной $_SERVER['REDIRECT_VAR']
или $_SERVER['REDIRECT_REDIRECT_VAR']
, и т.д.
A. Что вызывает набор переменной среды в Apache с помощью [E=VAR:VAL]
флаг, который будет переименован при наличии "ПЕРЕНАПРАВЛЕНИЯ _" предварительно ожидаемым к имени переменной?
B. Что может я делать, чтобы удостовериться, что я заканчиваю с Переменной среды с неизменным именем, таким образом, я могу получить доступ к нему в PHP как $_SERVER['VAR']
не имея необходимость обращаться к проверке изменения имени переменной, имеющего один из большего количества экземпляров "ПЕРЕНАПРАВЛЕНИЯ _" предварительно ожидаемый к нему?
Частичное решение найдено. Добавление следующего к запуску переписать правил воссоздает исходный ENV:VAR на каждом перенаправлении (а также отъезд версий REDIRECT_VAR там), если они необходимы:
RewriteCond %{ENV:REDIRECT_VAR} !^$
RewriteRule .* - [E=VAR:%{ENV:REDIRECT_VAR}]
Я вообще не тестировал это, и я знаю, что он не касается точек A или B, но есть некоторое описание этой проблемы в комментариях в документации PHP и некоторые возможные решения для доступ к этим переменным с помощью $ _SERVER ['VAR']
:
http://www.php.net/manual/en/reserved.variables.php#79811
EDIT - еще несколько ответов на предложенный вопрос:
A: Apache переименовывает переменные среды, если они участвуют в перенаправлении. Например, если у вас есть следующее правило:
RewriteRule ^index.php - [E=VAR1:'hello',E=VAR2:'world']
Тогда вы можете получить доступ к VAR1 и VAR2, используя $ _ SERVER ['VAR1']
и $ _ SERVER ['VAR2']
. Однако, если вы перенаправляете страницу следующим образом:
RewriteRule ^index.php index2.php [E=VAR1:'hello',E=VAR2:'world']
Тогда вы должны использовать $ _ SERVER ['REDIRECT_VAR1']
и т. Д.
B: Лучший способ решить эту проблему - это обрабатывать интересующие вас переменные с помощью PHP. Создайте функцию, которая просматривает массив $ _ SERVER
и находит нужные вам элементы. Вы даже можете использовать такую функцию:
function myGetEnv($key) {
$prefix = "REDIRECT_";
if(array_key_exists($key, $_SERVER))
return $_SERVER[$key];
foreach($_SERVER as $k=>$v) {
if(substr($k, 0, strlen($prefix)) == $prefix) {
if(substr($k, -(strlen($key))) == $key)
return $v;
}
}
return null;
}