我的.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>";
print_r($ _ ENV)也是空的。 但是我试着在php.ini中打开variables_order ='EGPCS',$ _ENV显示正确,但没有任何.htaccess设置variables,脚本的结果完全一样。 需要这个工作的网站,以便能够caching移动和不在不同的目录中的移动浏览器。
在你的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的作品,其他文件的工作,通过环境variables。 不要使用ProxyPass或ProxyPassMatch! 它不会传递环境variables并破坏一些php包。 有些人已经表明你可以使用LocationMatch和Interpolation,但是这似乎只适用于ajp://而不是fcgi:// !!!
不幸的是,这将用户设置为不在php-fpm池configuration中设置的值,而是设置为apache用户和组。 这是另一个问题,所以我会标记这个解决。 我必须将可写入文件夹更改为apache用户和组,如果您仔细考虑,那么这个文件夹就是安全的,但它也不是一成不变的,并且有一些奇怪的问题。