Использование setenv в Apache (Windows) DocumentRoot [дубликат]

На этот вопрос уже есть ответ здесь:

Стек пытается перенести конфигурацию с Linux на Windows Apache 2.2 ( via WAMP)

Мы пытаемся установить переменную ENV Apache, которая будет использоваться в качестве DocumentRoot и остальных директив после этого, чтобы мы могли использовать один и тот же набор confs на сервере и локальных рабочих копиях разработчиков.

В Debian Linux Apache у нас есть файл envvars, который загружается с помощью директив EXPORT. Это не работает в Windows, но

Setenv ROOT_TO_FILES "C:/wamp/www/test"

Кажется, работает так, как отображается phpinfo ()

Но когда мы используем его внутри директивы DocumentRoot vhost:

DocumentRoot ${ROOT_TO_FILES} 

Apache ищет этот буквальный текст в своем собственном корне.

Именно так мы используем его в Linux, но мы также пробовали синтаксис env = ROOT_TO_FILES

Документ apache кажется ясным о том, как «определять», но не о том, как использовать. Также Я вижу, что Apache 2.4 включает новую директиву Define, которая, кажется, делает именно это, что заставляет меня думать, что это могло быть невозможно в предыдущих версиях.

Приветствуются любые образцы использования под Windows Apache.

0
задан 2 May 2013 в 03:55
2 ответа

Директива 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.

1
ответ дан 23 November 2019 в 10:11

Вы можете использовать переменные 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)

0
ответ дан 23 November 2019 в 10:11

Теги

Похожие вопросы