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

Использование setenv в Apache (Windows) DocumentRoot

Стек пытается перенести конфигурацию с 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, вы можете

  1. создать ROOT_TO_FILES как общесистемную переменную env
  2. запустить apache из командной строки или пакетного файла

Вот пример: (введите свой путь к 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)