堆栈尝试将配置从 Linux 迁移到 Windows Apache 2.2(通过 WAMP)
我们正在尝试设置一个 ENV Apache 变量以用作 DocumentRoot 和此后的其余指令,以便我们可以在服务器和开发人员的本地工作副本上使用相同的 confs 集。
在 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 脚本可以使用的变量,例如它们出现在 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。
您甚至可以在 Windows Apache 中使用 Env 变量,例如,我使用此代码来设置我的服务器名:
但是通过这种方式,如果环境变量在启动服务器之前定义,并且不能被 SetEnv 更改,则只能以这种方式使用环境变量。
如果你喜欢使用 ${ROOT_TO_FILES} 就像在 Linux 中那样,你可以
这是一个示例:(如果不同,请输入您的 httpd.exe 路径)
这在 apache 2.2 和 2.4 中进行了测试。
如果你愿意,你甚至可以使用 SetEnv 在 apache.con 中声明的变量,例如:
但是你需要知道,对于像访问控制这样的“早期”部分,SetEnv 设置的变量是不可访问的。
如果您需要有关 SetEnv(或 SetEnvIf)的更多信息,请查看文档http://httpd.apache.org/docs/2.4/mod/mod_env.html#setenv