11

我在我的 ubuntu 主服务器上安装了 Zend。在我的 .htaccess 文件中,我有以下代码:

SetEnv APPLICATION_ENV development

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php [NC,L]

当我在公共文件夹中的 index.php 中回显 APPLICATION_ENV 时,未设置 APPLICATION_ENV。

我究竟做错了什么?

在 apache 中启用了 Mod 重写。

4

5 回答 5

18

为了在 .htaccess 文件中使用 SetEnv,我相信您需要设置...

AllowOverride FileInfo

...在相关的虚拟主机目录块中。(然后像往常一样重新启动 httpd 服务。)

此外,根据您运行 PHP 的方式,这些信息可能会被删除。(例如:suexec 将有效地删除所有非 HTTP* 环境变量。)

于 2011-04-23T13:58:08.337 回答
5

首先你需要安装mod_env(和 mod_rewrite)

仔细检查 Apache 是否加载了以下任一模块:

apachectl -lhttpd -l

根据我相信的操作系统分布,命令可能会有所不同。

要使 .htaccess 文件正常工作,您需要 AllowOveride All 可以在不同的配置文件中设置(以及“部分”,具体取决于您的操作系统作为 Apache 的配置方式。您最好的选择是找出它是 htaccess 文件问题还是环境一. 在主配置文件的任意位置设置:

SetEnv TESTME foobar

重新启动 Apache 并从 PHP 脚本回显 TEST。如果你明白了,调试 .htaccess

注意 1:在您的虚拟主机中将 .htacess 的使用限制在您真正需要它的文件夹或将配置移动到虚拟主机。

注意 2:如果您安装了 Apache mod_dir,您可能不需要所有这些重写规则。看看它

于 2011-05-20T11:16:20.697 回答
5

您还可以使用:

RewriteRule .* - [E=ENV_NAME_HERE:ENV_VALUE_HERE]
于 2015-01-18T00:47:14.940 回答
4

我更喜欢将 SetEnv 放在本地服务器的 httpd.conf 文件中,这样我的所有本地 ZF 应用程序都在开发模式下运行,当我推送到暂存服务器时,它有一个标志来设置环境为暂存,然后是生产服务器没有这样的设置,所以它默认为生产...

这样,我可以在源代码控制中保留相同的 .htaccess 文件,当我将其推送到不同的服务器时,它的行为与预期相同。

middaparka 对 suExec 的看法是正确的... suExec 会阻止您在 .htaccess 文件中设置自定义环境变量 - 根据 WebFaction 论坛上的 remi 所说。

于 2011-04-23T21:02:49.603 回答
4

如果您在 Mac 上运行家庭服务器或启用了 suEXEC,则有适当的安全措施来去除已定义的任何非 http 环境变量,因此它们不会出现在 $_ENV['APPLICATION_ENV'] 中。您可以,但是通过 PHP 函数访问这些以获得相同的东西。

$var = apache_getenv('APPLICATION_ENV');

如果需要,您甚至可以在 PHP 中定义环境变量,但不推荐。

$_ENV['APPLICATION_ENV'] = apache_getenv('APPLICATION_ENV');

我有一个与你几乎相同的配置,我们只定义一个全局:

define('APPLICATION_ENV', apache_getenv('APPLICATION_ENV'));

一旦你这样做了,它应该可以按需要工作。

于 2013-07-28T21:51:14.553 回答