在我的.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有关SetEnv
,SetEnvIf
和RewriteRule
的可见性。看来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/