我在我的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重写。
答案 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'));
一旦你这样做,它应该按照需要工作。