在Apache中使用setenv(Windows)DocumentRoot

尝试将configuration从Linux迁移到Windows Apache 2.2(通过WAMP)

我们试图设置ENV Apachevariables作为DocumentRoot和其余的指令,因此我们可以在服务器和本地工作副本上使用同一组conf。

在Debian Linux Apache中,我们有一个加载了“EXPORT”指令的envvars文件。 这不适用于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包含了一个新的“Define”指令,这个指令似乎正是这样做的,这使得我认为它在以前的版本中可能是不可能的。

任何在Windows下使用Apache样本将不胜感激。

Apache的SetEnv指令只是定义了一个PHP或Perl脚本可以使用的variables,例如它们在PHP的$_SERVER[]全局数组中显示。

SetEnv ,也不是堂兄弟,在Apache指令中使用variables有什么关系。

http://httpd.apache.org/docs/current/mod/mod_env.html#setenv

DocumentRoot 通常需要一个文字string…

你想要做的是使用mod_macro(在之前的Apache 2.4.5 / *中包含,你可以find它作为一个额外的模块下载)… http://httpd.apache.org/docs/current/mod/ mod_macro.html

*对于Apache 2.2,searchGoogle for mod_macro Apache 2.2 VC9。 TS /线程安全用于mod_php,NTS /非线程安全用于PHP-FCGI。

你甚至可以在windows apache中使用Envvariables,比如我用这个代码来设置我的服务器名称:

 ServerName "${COMPUTERNAME}:80" 

但是通过这种方式,只能在启动服务器之前定义envvariables,而不能通过SetEnv进行更改。

如果你喜欢使用$ {ROOT_TO_FILES}来像Linux那样做,你可以

  1. 创buildROOT_TO_FILES作为系统范围envvariables
  2. 从命令行或batch file启动apache

这里有一个例子:(如果httpd.exe不同,请input你的path)

  set ROOT_TO_FILES=C:/wamp/www/test %ProgramFiles%\xampp\apache\bin\httpd 

这在apache 2.2和2.4中进行了testing。

如果你喜欢,你甚至可以使用SetEnv中使用apache.con声明的variables,例如:

 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设置的variables不能访问像访问控制1那样的“早期”部分。

看看文档http://httpd.apache.org/docs/2.4/mod/mod_env.html#setenv,如果你需要更多关于SetEnv(或SetEnvIf)