我正在尝试将环境变量从 .htaccess 传递到 PHP。这在我的本地 WAMP 服务器上工作得很好,但在托管我的网站的服务器上,它无缘无故地失败了。
这是我的测试配置:
.htaccess:
SetEnv TEST_VARIABLE test_value
测试.php:
<pre>
getenv('TEST_VARIABLE') = <?php print getenv('TEST_VARIABLE'); ?>
getenv('REDIRECT_TEST_VARIABLE') = <?php print getenv('REDIRECT_TEST_VARIABLE'); ?>
</pre>
在我的本地服务器上,正确获取 test.php 返回:
getenv('TEST_VARIABLE') = test_value
getenv('REDIRECT_TEST_VARIABLE') =
但在生产服务器上,它返回:
getenv('TEST_VARIABLE') =
getenv('REDIRECT_TEST_VARIABLE') =
我已经排除的事情:
mod_env
主机未安装/启用。不可能,因为那时SetEnv
不会被识别,并且在处理 .htaccess 时我会得到 500。
AllowOverrides
in httpd.conf
因为这个目录不包括FileInfo
。不可能,因为这样 Apache 在遇到以下情况时会抛出错误“SetEnv not allowed here”SetEnv
指令,我会再次得到 500。
variables_order
php.ini 中不包含“E”。这可以解释$_ENV
超全局是空的(确实如此),但不是为什么getenv()
不返回这些变量的值。
整个环境都搞砸了。不可能,因为getenv('PATH')
and getenv('SERVER_NAME')
仍然返回有效值。
此时我不知道什么配置可能会导致这种情况。
我认为在 .htaccess 中使用 setenv 通常不起作用。它是一个 shell 脚本命令(bash、C shell 等)。如果你的服务器does支持setenv,根据https://kb.mediatemple.net/questions/36/Using+Environment+Variables+in+PHP#gs https://kb.mediatemple.net/questions/36/Using+Environment+Variables+in+PHP#gs您需要让变量名称以 HTTP_ 开头。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)