Php http-vhosts.conf虚拟主机环境变量不工作

Php http-vhosts.conf虚拟主机环境变量不工作,php,macos,apache,virtualhost,vhosts,Php,Macos,Apache,Virtualhost,Vhosts,我正在Mac OS X 10.9.4上运行Apache2.2.26和PHP5.4.24。我有几个虚拟主机在这个系统上运行,它们都成功运行。我正在尝试将环境变量添加到其中一个虚拟主机,但我不希望它们位于.htaccess中,因此我唯一的选择是将它们添加到httpd-vhosts.conf中的 问题是,在我将环境变量安装到httpd-vhosts.conf文件中之后(当然,在我重新启动Apache“sudo apachectl restart”之后),环境变量不会出现。但是,如果我将它们添加到.ht

我正在Mac OS X 10.9.4上运行Apache2.2.26和PHP5.4.24。我有几个虚拟主机在这个系统上运行,它们都成功运行。我正在尝试将环境变量添加到其中一个虚拟主机,但我不希望它们位于.htaccess中,因此我唯一的选择是将它们添加到httpd-vhosts.conf中的

问题是,在我将环境变量安装到httpd-vhosts.conf文件中之后(当然,在我重新启动Apache“sudo apachectl restart”之后),环境变量不会出现。但是,如果我将它们添加到.htaccess中(只是为了进行比较),它们看起来很好。我错过了什么

NameVirtualHost *:80

<VirtualHost *:80>
  ServerName mysite.local
  DocumentRoot "/path/to/mysite.com"
  SetEnv siteid 1234
  ErrorLog "/var/log/apache2/mysite.local-error_log"
</VirtualHost>
再说一次,我的虚拟主机运行良好。只是在我的PHP代码中调用时,环境变量没有出现。我试过这三个命令中的每一个:

echo $_SERVER["siteid"];
echo getenv("siteid");
echo apache_getenv("siteid");

我会做错什么呢?

对我来说,这是一个痛苦的探索,但我找到了一个非常简单但又模糊的答案。首先,让我澄清我之前的问题,我没有意识到的是我的Mac运行OS X服务器,它有效地改变了Apache在我的系统上运行的方式

下面是通过OS X服务器应用程序在我的系统上安装的每个虚拟主机的等效httpd-vhosts.conf文件

/Library/Server/Web/Config/apache2/sites/0000_any_80_mylocalsite.conf
显然,“80”是常规http请求的端口,“mylocalsite”是我创建的本地虚拟主机的名称(在OSX服务器应用程序中)。既然此文件已由OS X Server生成,我现在可以按如下方式编辑它:

sudo vi /Library/Server/Web/Config/apache2/sites/0000_any_80_mylocalsite.conf
它打开了一个配置文件,看起来与正常的httpd-vhosts.conf文件非常相似(请注意SetEnv testid“1234”行,这是我一直在搜索的解决方案,只能手动完成,不能通过OS X服务器应用程序完成)


ServerName mysite.local
服务器管理员admin@example.com
DocumentRoot“/my/local/docroot/path/to/mysite.com”
SetEnv测试ID“1234”
DirectoryIndex.html index.php/wiki//xcode/default.html
CustomLog/var/log/apache2/access\u log组合vhost
ErrorLog/var/log/apache2/error\u log
斯伦金
SSLCipherSuite“全部:!所有:!所有:!所有:!所有:!所有:!所有:!所有:!所有:!所有:!所有:!所有:!所有:!所有:!所有:!所有:!所有:!所有:!所有:!所有:!所有:!所有:!所有:!所有:!所有:!所有:!所有:
SSLProtocol-全部+SSLv3+TLSv1
SSLProxyEngine打开
SSLProxyProtocol-全部+SSLv3+TLSv1
选项所有-索引-ExecCGI-包含+多视图
允许超越所有
走开
全盘否定
ErrorDocument 403/customerror/websitesof403.html

求你了,我希望有一天这能帮助别人。我花了太多的时间寻找这个解决方案,却在暴力战术中偶然发现了它,我想知道这有希望为人们节省数小时的自我搜索时间。

如果你要否决这个问题,至少告诉我为什么。我已经非常简洁地概述了我的问题,并提供了详细的平台和版本控制信息。你怎么敢,我同意,投赞成票。您更改默认的
变量\u顺序
(EGPCS)的原因是什么?仅供参考,这在我的服务器上运行良好。谢谢@Phil。它以前被设置为GPCS,所以我只是在末尾添加了E,没有考虑它。我现在看到了“defaultvalue:'EGPCS'”指令行,并相应地进行了更新。不幸的是,我重新启动了Apache,但这并没有影响我上面的问题。您是否在正确的虚拟主机中检查脚本?ie,你打算
http://mysite.local/path/to/script.php
?尝试进行明显的更改(如更改
DocumentRoot
),并确保在重新启动/重新加载Apache时应用该更改
sudo vi /Library/Server/Web/Config/apache2/sites/0000_any_80_mylocalsite.conf
<VirtualHost *:80>
  ServerName mysite.local
  ServerAdmin admin@example.com
  DocumentRoot "/my/local/docroot/path/to/mysite.com"
  SetEnv testid "1234"
  DirectoryIndex index.html index.php /wiki/ /xcode/ default.html
  CustomLog /var/log/apache2/access_log combinedvhost
  ErrorLog /var/log/apache2/error_log
  <IfModule mod_ssl.c>
      SSLEngine Off
      SSLCipherSuite "ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM"
      SSLProtocol -ALL +SSLv3 +TLSv1
      SSLProxyEngine On
      SSLProxyProtocol -ALL +SSLv3 +TLSv1
  </IfModule>
  <Directory "/my/local/docroot/path/to/mysite.com">
      Options All -Indexes -ExecCGI -Includes +MultiViews
      AllowOverride All
      <IfModule mod_dav.c>
          DAV Off
      </IfModule>
      <IfDefine !WEBSERVICE_ON>
          Deny from all
          ErrorDocument 403 /customerror/websitesoff403.html
      </IfDefine>
  </Directory>
</VirtualHost>