В чем разница между $ {var} и% {var} в httpd.conf?
Почти все. Нет строгого правила, которое бы гласило « $делает х, %делает у», потому что они делают разные вещи в зависимости от того, где и как они используются.
Будет ли $ {VAR} использоваться везде в httpd.conf, кроме директивы mod_rewrite
Нет - ${VAR}применяется в качестве замены во всех местах конфигурации, даже в строке, связанной с mod_rewrite. Они могут быть определены только при запуске, используя -Dопцию, переданную в двоичный файл httpd, или Defineдирективу.
Это может быть сделано, потому что эти переменные не должны содержать :символ, тогда как RewriteMapиспользование должно содержать :символ. Это позволяет $использовать его очень разными способами без конфликта - парсер видит :и знает, что он не должен его заменять.
Будет ли переменная, установленная в httpd.conf с использованием директивы SetEnvIf, для использования в том же httpd.conf, использоваться как $ {var}, кроме случаев, когда переменная используется с директивой mod_rewrite, где переменная будет использоваться как% {var}?
Нет. Переменные среды - это не то же самое, что переменные, заданные с помощью -Dили Define- это совершенно отдельный контекст для каждого запроса (это тот, с которым вы устанавливаете SetEnvIf), который будут использовать только определенные директивы. Они специально упоминаются в тех случаях, когда они поддерживаются - в mod_rewrite они есть %{ENV:variable}, в журналах они есть %{variable}e, и во многих директивах есть логическая проверка, которая выглядит следующим образом env=variable.
Итак, в основном; это запутанный беспорядок - свидетельство истории веб-сервера за последние пару десятилетий. Вероятно, главное, что вас смущает, это то, что синтаксис mod_rewrite не распространяется ни на какую другую часть конфигурации; все по другому. Главное, на что следует обратить внимание, это то, что не существует управляющего «правила», которое бы все это имело смысл - « $в одном месте» означает нечто совершенно отличное от « $в другом месте».
Несколько удобных ориентиров:
- Если вы хотите установить переменную статически при запуске Apache, используйте
Defineи ${VAR}замените один раз при запуске Apache. Это в основном полезно, когда вы хотите сделать что-то вроде обмена файлами конфигурации между средой разработки и производственной средой, но это не следует путать с использованием $from RewriteMap, который всегда содержит a :.
- Если вы хотите работать с переменными в определенных запросах, то переменные среды - это то, что вам нужно, но вы не можете делать предположения о синтаксисе, который вы будете использовать для их получения при использовании с определенной директивой. Вам нужно будет проверить документацию для этой директивы.
- Когда речь идет о mod_rewrite, выбросьте все, что вы знали о переменных и их синтаксисе. Он имеет свой собственный набор переменных
%{VAR}, вы можете получить свои «нормальные» переменные окружения с помощью %{ENV:VAR}и вы можете установить переменные окружения с помощью [E=VAR].