Php

php htaccess 環境變數 php-fpm mod_proxy_fcgi apache 2.4

  • October 11, 2014

我的.htaccess:

SetEnv tvar "my value"
RewriteEngine on
RewriteRule .* - [E=boostpath:normal]

我的虛擬主機設置:

  AllowOverride All
  Options FollowSymLinks
  Require all granted
  ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9001/home/dir/public_html/www.site.com/$1

我的 php 文件:

<?php
putenv("foo=bar");
echo "<br><br>env";
echo getenv("foo"); #works, outputs bar
echo "<br><br>env2";
echo getenv("tvar"); #doesn't work, empty
echo getenv("REDIRECT_tvar"); #doesn't work, empty
echo "<br><br>";
echo "<br><br>env3";
echo getenv("boostpath"); #doesn't work, empty
echo getenv("REDIRECT_boostpath"); #doesn't work, empty
echo "<br><br>";

列印_r( $ _ENV) is also empty. But I tried turning variables_order = ‘EGPCS’ in php.ini and $ _ENV 顯示正確,但沒有任何 .htaccess 設置變數,腳本的結果完全相同。需要此功能才能使站點能夠在不同目錄中記憶體移動和非移動查看器。

在您的 VirtualHost 指令中:

<Directory /home/dir/public_html/www.site.com>
   AllowOverride All
   Options FollowSymLinks
   Require all granted
   RewriteEngine On
   RewriteCond %{REQUEST_FILENAME} ^/((.*\.php)(/.*)?)$
   RewriteCond %2 -f
   RewriteRule . fcgi://127.0.0.1:9001/%1 [L,P]
   RewriteOptions Inherit
</Directory>

站點很快,drupal 工作,其他文件工作,環境變數通過。不要使用 ProxyPass 或 ProxyPassMatch!!!!它不會傳遞環境變數和破壞一些 php 包。有些人已經表明您可以使用 LocationMatch 和 Interpolation 但這似乎只適用於 ajp:// 而不是 fcgi:// !!!

不幸的是,這不會將使用者設置為 php-fpm 池配置中設置的內容,而是設置為 apache 使用者和組。這是另一個問題,所以我將標記為已解決。我必須將可寫文件夾更改為 apache 使用者和組,如果您考慮一下,這有點安全,但它也是不合理的,並且有一些奇怪的問題。

引用自:https://serverfault.com/questions/633096