7

在我的.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脚本。我应该如何解决?

4

1 回答 1

17

由于我必须自己对此进行测试并且只能确认您写的内容是正确的,所以我开始环顾四周,发现这篇关于,和可见性的帖子。如果我将您的示例更改为使用,它看起来是不可见的:SetEnvSetEnvIfRewriteRuleSetEnvRewriteCond

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.
于 2013-10-14T15:10:49.887 回答