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

标签 php macos apache virtualhost vhosts

我在 Mac OS X 10.9.4 上运行 Apache 2.2.26 和 PHP 5.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.ini 文件,以确保其中没有任何禁止的内容,并且唯一相关的行看起来不错:

variables_order = "GPCSE"

再次强调一下,我的虚拟主机运行良好。只是我的PHP代码中调用时没有出现环境变量。我已经尝试过这三个命令:

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

我做错了什么?

最佳答案

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

话虽如此,下面是通过 OS X Server 应用程序安装在我的系统上每个虚拟主机的等效 httpd-vhosts.conf 文件。

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

显然,“80”是常规 http 请求的端口,“mylocalsite”是我创建的本地虚拟主机的名称(在 OS X Server 应用程序内)。现在该文件已由 OS X Server 生成,我现在可以对其进行如下编辑:

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

拜托,我希望这有一天能对其他人有所帮助。我花了太多时间寻找这个解决方案,结果却在暴力战术中偶然发现了它,我想知道这希望能节省一些人自己搜索的时间。

关于php - http-vhosts.conf 虚拟主机环境变量不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26771932/

相关文章:

apache - 如何使用 Apache 作为我的 Tomcat 应用程序的代理?

php - 调用未定义函数 Symfony\Polyfill\Mbstring\iconv_strlen()

php - 如何在带有 XAMPP 的 Mac 上使用 PHP 运行 ffmpeg

cocoa - 将 GIF 文件加载到 CGImage 中

php - Pico Install 中的子页面导致 404

php - 分析在 apache 中运行的 PHP

php - 如果输入 '0',我如何验证 $value 以使其通过?

php - 使用用户编辑帖子更新数据库

php - 'SEL' 是什么意思,如何修复?

swift - 更改 NSButton 的图像