.htaccess中的Zend SetEnv无法正常工作

时间:2011-04-23 13:39:48

标签: php .htaccess zend-framework setenv

我在我的ubuntu homeserver上安装了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重写。

5 个答案:

答案 0 :(得分:18)

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

AllowOverride FileInfo

...在相关的virtualhost目录块中。 (然后按照惯例重新启动httpd服务。)

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

答案 1 :(得分:5)

您也可以使用:

RewriteRule .* - [E=ENV_NAME_HERE:ENV_VALUE_HERE]

答案 2 :(得分:4)

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

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

middaparka是关于suExec的... suExec阻止你在.htaccess文件中设置自定义环境变量 - 根据WebFaction论坛上的remi。

答案 3 :(得分:4)

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

仔细检查Apache是​​否已加载模块:

apachectl -l <​​/ strong> 要么 httpd -l <​​/ strong>

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

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

SetEnv TESTME foobar

从PHP脚本重启Apache并回显TEST。如果你得到它,请调试.htaccess

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

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

答案 4 :(得分:1)

如果您在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'));

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