用SetEnv重写Cond

hsz*_*hsz 5 apache mod-rewrite

在我的.htaccess设置中:

SetEnv APPLICATION_ENV development
Run Code Online (Sandbox Code Playgroud)

我想检查是否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]
Run Code Online (Sandbox Code Playgroud)

但是它不起作用 - 总是运行app.php脚本.我该如何解决?

Qbe*_*ben 13

因为我有这个测试自己,只能确认你写的是正确的,我开始环顾四周,发现这个职位有关SetEnv,SetEnvIfRewriteRule知名度.它似乎SetEnv是不可见的RewriteCond,如果我改变你的例子使用:

SetEnvIf APPLICATION_ENV  ^(.*)$ APPLICATION_ENV=development
Run Code Online (Sandbox Code Playgroud)

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

RewriteRule .* - [E=APPLICATION_ENV:development,NE]
Run Code Online (Sandbox Code Playgroud)

但是,看起来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.
Run Code Online (Sandbox Code Playgroud)