2014-11-06 109 views
2

我在Mac OS X 10.9.4上使用PHP 5.4.24运行Apache 2.2.26。我有几个虚拟主机在这个系统上运行,并且它们都成功运行。我试图向其中一个虚拟主机添加环境变量,我不希望它们在.htaccess中,所以我唯一的选择是将它们添加到httpd-vhosts.conf中。http-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.ini文件,以确保没有什么是望而却步那里,唯一相关的线看起来不错:

variables_order = "GPCSE" 

同样,仅仅是明确的,我虚拟主机RUN FINE。只是在我的PHP代码中调用时,环境变量才会出现。我已经尝试了这三个命令中的每一个:

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

我能做什么错?

+1

如果你打算低估这个问题,至少告诉我为什么。我非常简洁地概述了我的问题,并提供了详细的平台和版本信息。你怎么敢。 – David 2014-11-06 04:52:37

+0

我同意,有一个upvote。你为什么从默认'variables_order'(EGPCS)更改的原因?仅供参考,这在我的服务器上正常工作。 – Phil 2014-11-06 04:58:18

+0

谢谢@Phil。它之前被设置为GPCS,因此我只是将E添加到最后,而没有任何考虑。我现在看到“默认值:'EGPCS'”指令行,并相应地进行了更新。不幸的是,我重新启动了Apache,并没有影响我的问题。 – David 2014-11-06 05:02:22

回答

3

这对我来说是一个令人痛苦的追求,但我发现了一个非常简单却又晦涩难懂的答案。首先,让我澄清一下我之前的问题,即我没有意识到的是,我的Mac运行OS X Server,它有效地改变了Apache在我的系统上运行的方式。

虽这么说,下面是等价的httpd-vhosts.conf文件PER通过安装OS X Server应用程序在我的系统上的虚拟主机

/Library/Server/Web/Config/apache2/sites/0000_any_80_mylocalsite.conf 

显然,“80”是端口定期HTTP请求和“mylocalsite”是我创建的本地虚拟主机(OS X Server应用程序内)的名称。现在这个文件已经被OS X服务器产生,如下我现在可以编辑:

sudo vi /Library/Server/Web/Config/apache2/sites/0000_any_80_mylocalsite.conf 

从而揭开了配置文件,寻找类似的,几乎完全像一个正常的httpd-vhosts.conf文件(注意SETENV testid“1234”线这是解决方案,我一直在寻找,而这只能手动和没有做过通过OS X Server应用程序).​​..

<VirtualHost *:80> 
    ServerName mysite.local 
    ServerAdmin [email protected] 
    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> 

请,我希望这可以帮助别人还有一天。我花了太多的时间寻找这个解决方案,只是用暴力手段绊倒它,我想知道这有希望能够节省一些人搜索自己的时间。