Стек пытается перенести конфигурацию с Linux на Windows Apache 2.2 (через WAMP)
Мы пытаемся установить переменную ENV Apache, которая будет использоваться в качестве DocumentRoot и остальных директив после этого, чтобы мы могли использовать один и тот же набор confs на сервере и локальных рабочих копиях разработчиков.
В Debian Linux Apache у нас есть файл envvars, который загружается с помощью директив EXPORT. Это не работает в Windows, но
Setenv ROOT_TO_FILES "C:/wamp/www/test"
Кажется, работает, как отображается phpinfo ()
Но когда мы используем его внутри директивы DocumentRoot виртуального хоста:
DocumentRoot ${ROOT_TO_FILES}
Apache ищет этот буквальный текст в собственном корне.
Именно так мы используем его в Linux, но мы также пробовали синтаксис env = ROOT_TO_FILES
Документ apache кажется ясным о том, как «определять», но не о том, как использовать. Также я вижу, что Apache 2.4 включает новую директиву «Определить», которая, кажется, делает именно это, что заставляет меня думать, что это могло быть невозможно в предыдущих версиях.
Приветствуются любые образцы использования под Windows Apache.
Апачи SetEnv
директива просто определяет переменную, которую могут использовать сценарии PHP или Perl, например, они отображаются в PHP $_SERVER[]
глобальный массив.
SetEnv
, как и его кузены, не имеют ничего общего с использованием переменных в директивах Apache.
http://httpd.apache.org/docs/current/mod/mod_env.html#setenv
DocumentRoot
обычно нужна буквальная строка ...
Что вы хотите сделать, так это использовать mod_macro (до этого он был включен в Apache 2.4.5 / *, вы можете найти его как дополнительный модуль для загрузки) ... http://httpd.apache.org/docs/current/mod/mod_macro.html
* Для Apache 2.2 найдите в Google mod_macro Apache 2.2 VC9. TS / Thread-safe - для mod_php, NTS / Non-Thread-Safe - для PHP-FCGI.
Вы можете использовать переменные Env даже в Windows Apache, например. Я использую этот код для установки имени сервера:
ServerName "${COMPUTERNAME}:80"
Но таким образом вы можете использовать только переменные env таким образом, если они определены до запуска вашего сервера, и они НЕ могут быть изменены SetEnv.
Если вы хотите использовать $ {ROOT_TO_FILES}, как это было в Linux, вы можете
Вот пример: (введите свой путь к httpd.exe, если он другой)
set ROOT_TO_FILES=C:/wamp/www/test
%ProgramFiles%\xampp\apache\bin\httpd
Это было протестировано в apache 2.2 и 2.4.
Если хотите, можете даже использовать переменные, объявленные в apache.con с SetEnv, например. как это:
SetEnv MY_VHOST "example.com"
Header set X-Vhost %{MY_VHOST}e
## this will add your own variable to this logformat
LogFormat "%h %l %{MY_VHOST}e %t \"%r\" %>s %b" common_myvhost
CustomLog log/access.log common_myvhost
Но вам нужно знать, что переменные, установленные SetEnv, не будут доступны для «ранних» разделов, таких как контроль доступа.
Взгляните на документацию http://httpd.apache.org/docs/2.4/mod/mod_env.html#setenv если вам нужна дополнительная информация о SetEnv (или SetEnvIf)