Назад | Перейти на главную страницу

Принцип квантовой неопределенности Apache ... Если директива истинна и ложна

Значение переменной окружения устанавливается в 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, перезапуск не будет работать.