При установке переменных среды в директивах Apache RewriteRule, что заставляет имя переменной быть снабженным префиксом “ПЕРЕНАПРАВЛЕНИЕ _”?

Я пытаюсь установить переменные среды 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}]
70
задан Simon H 9 August 2013 в 23:49
поделиться

1 ответ

Я вообще не тестировал это, и я знаю, что он не касается точек 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;
}
8
ответ дан 24 November 2019 в 13:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: