Php
php htaccess 環境變數 php-fpm mod_proxy_fcgi apache 2.4
我的.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 使用者和組,如果您考慮一下,這有點安全,但它也是不合理的,並且有一些奇怪的問題。