为什么环境变量在htaccess中不起作用

时间:2015-12-28 17:24:59

标签: apache .htaccess mod-rewrite

我有这个htaccess

RewriteEngine On

RewriteCond %{REQUEST_URI} /xxx.php$ [NC]
RewriteRule ^.*$ - [ENV=MAKE_CACHE:true]

<If "%{ENV:MAKE_CACHE} =~ /^true$/">
    Header set CUSTOM_HEADER "custom value or my header"
</If>

我简化了htaccess但你可以得到这个想法:如果用户试图reuqest“xxx.php”我设置了一个环境变量,后者我设置了一个头CUSTOM_HEADER但由于某种原因Apache没有“看到”变量“ MAKE_CACHE“当到达线”“。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

这与Apache内部处理的非直观序列有关。

<If ...的表达式比任何 RewriteRule更早得到评估,更不用说RewriteRule.htaccess了,甚至更晚。

有两种方法可以使订购正确:

  • 使用SetEnvIf(不在<Location>内)设置初始var,而不是<If ...。当它以这种方式指定时,它会很早地运行。
  • Header指令上使用基于表达式的条件子句。这会延迟执行。
祝你好运!

编辑:测试示例:

Header always set FOO BAR "expr=%{REQUEST_URI} =~ m#^/xxx.php$#"