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

最佳答案

由于我必须自己进行测试,并且只能确认您写的内容是正确的,所以我开始四处张望,发现了这个post有关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文档的Setting Environment Variables部分中非常清楚:
The SetEnv directive runs late during request processing meaning that directives
such as SetEnvIf and RewriteCond will not see the variables set with it.

关于apache - 使用 SetEnv 重写条件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19362746/

10-13 01:23