用SetEnv重写

在我的.htaccess我设置了:

 SetEnv APPLICATION_ENV development 

我想检查是否APPLICATION_ENV等于development然后运行app_dev.php ,否则app.php

 SetEnv APPLICATION_ENV development RewriteCond %{ENV:APPLICATION_ENV} development RewriteRule .? %{ENV:BASE}/app_dev.php [L] RewriteRule .? %{ENV:BASE}/app.php [L] 

然而,它不工作 – 总是运行app.php脚本。 我应该如何解决它?

由于我必须自己测试,只能确认你写的是正确的,所以我开始环顾四周,发现这个帖子关于SetEnvSetEnvIfRewriteRule可见性。 看起来像SetEnv是不可见的RewriteCond ,如果我改变你的例子使用:

 SetEnvIf APPLICATION_ENV ^(.*)$ APPLICATION_ENV=development 

我实际上得到你必须加载app_dev.php的规则。 你也可以使用RewriteRule来设置变量:

 RewriteRule .* - [E=APPLICATION_ENV:development,NE] 

但是,看起来像SetEnv不能使用(在Apache 2.2.22上测试)。

编辑
正如julp在这篇文章的评论中指出的,这在Apache文档部分设置环境变量中是非常清楚的:

 The SetEnv directive runs late during request processing meaning that directives such as SetEnvIf and RewriteCond will not see the variables set with it.