На этот вопрос уже есть ответ здесь:
Стек пытается перенести конфигурацию с 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.
Директива 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)