2011-04-23 39 views
9

我在我的ubuntu homeserver上安装了Zend。在我的.htaccess文件我有以下代码:Zend SetEnv in .htaccess not working

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重写。

+1

你有mod_env您的服务器上启用? – 2011-04-24 03:59:03

回答

16

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

AllowOverride FileInfo 

...的相关虚拟主机目录块内。 (然后按照惯例重新启动httpd服务。)

此外,根据您如何运行PHP,它是可能这样的信息被剥离。 (例如:suexec将有效地删除所有非HTTP *环境变量。)

+2

AllowOverride All将允许它读取整个.htaccess文件 – Ascherer 2011-04-25 19:46:27

+0

谢谢,这让我看到我目前的服务器不允许这个,不幸的是... =/ – giovannipds 2017-03-04 15:14:14

4

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

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

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

4

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

如果Apache在装载任何模块(S)仔细检查:

的apachectl -l的httpd -l

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

对于.htaccess文件的工作你需要AllowOveride所有可以设置在不同的配置文件(和“部分”取决于你的操作系统配置Apache的方式。你最好的选择是找出它是否是一个htaccess文件的问题或环境中的一个主要的配置文件的任何地方设置:。

SETENV TESTME foobar的

重新启动Apache和PHP脚本回声测试,如果你得到了它,调试的.htaccess

注1:限制你的虚拟主机的使用.htacess到您真正需要的文件夹或将配置移动到虚拟主机。注意2:如果您安装了Apache mod_dir,您可能不需要所有这些重写规则。看看它

+0

在我的Ubuntu机器上,** - l **开关显示编译成模块。 ** - M **开关显示_all_加载的模块(这是我以为你是在之后)。 – 2011-10-24 03:49:02

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')); 

一旦你这样做,它应该根据需要工作。

3

您还可以使用:

RewriteRule .* - [E=ENV_NAME_HERE:ENV_VALUE_HERE] 
+0

这对我来说是最简单的解决方案,谢谢。 – 2017-09-08 21:55:44