http-vhosts.conf虚拟主机环境变量不起作用

时间:2014-11-06 04:48:58

标签: php macos apache virtualhost vhosts

我在Mac OS X 10.9.4上使用PHP 5.4.24运行Apache 2.2.26。我在这个系统上运行了几个虚拟主机,并且所有虚拟主机都成功运行。我试图将环境变量添加到其中一个虚拟主机,并且我不希望它们位于.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.ini文件,以确保那里没有任何禁令,并且唯一相关的行看起来不错:

variables_order = "GPCSE"

同样,为了清楚起见,我的虚拟主机运行得很好。只是在我的PHP代码中调用时环境变量不会出现。我已经尝试了这三个命令中的每一个:

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

我能做错什么?

1 个答案:

答案 0 :(得分:3)

这对我来说是一个令人难以忍受的追求,但我找到了一个非常简单而又模糊的答案。首先,让我澄清一下我之前的问题,即我没有意识到的是我的Mac运行OS X Server,它有效地改变了Apache在我的系统上运行的方式。

话虽如此,下面是通过OS X Server应用程序在我的系统上安装的等效的httpd-vhosts.conf文件 PER VIRTUAL HOST

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

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

这打开了一个看似相似的配置文件,几乎与普通的httpd-vhosts.conf文件完全一样(注意 SetEnv testid&#34; 1234&#34; 这就是我的解决方案搜索,这只能手动完成而不是通过OS X Server应用程序完成... ...

<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>

请,我希望有一天能帮助别人。我花了太多时间寻找这个解决方案,只是在蛮力战术中偶然发现它,我想知道这可以节省一些时间来搜索自己。