Значение переменной окружения устанавливается в bash:
# export PRODUCTION=true
# echo $PRODUCTION
# true
Вот соответствующий отрывок из моего файла виртуального хоста:
<If "-T osenv('PRODUCTION')">
Define dogs dogs
</If>
<Else>
Define cats cats
</Else>
apache2ctl -S
производит:
Define: dogs=dogs
Define: cats=cats
Таким образом, у нас есть квантовое условие, которое и правда и ложь. Что здесь происходит и как заставить его вести себя нормально?
Я не могу найти в этих ссылках ничего, что указывало бы на то, что я делаю что-то не так.
Когда ты бежишь apachectl -S
он просто анализирует код, чтобы убедиться, что он синтаксически верен, а на самом деле не выполняет код. Вывод просто сообщает вам, что может произойти, а не результат оценки блока if / else.
Вы можете проверить это, фактически имея активную директиву Apache в ваших блоках if и else. Например:
<If "-T osenv('PRODUCTION')">
Define dogs dogs
Header set MyHeader1 "PRODUCTION defined %D %t"
</If>
<Else>
Define cats cats
Header set MyHeader2 "PRODUCTION undefined %D %t"
</Else>
И вы запускаете Apache с определенным PRODCUTION или без него, вы увидите другой заголовок в ответах вашего сервера. В %D
и %t
нужно ли добавлять что-то, что меняется с каждым запросом, чтобы вы не думали, что получаете что-то в кэше.
Обратите внимание, чтобы это сработало, вы должен сделайте полную остановку и запуск в промежутке между установкой / отключением переменной среды PRODUCTION, перезапуск не будет работать.