Changes with Apache 2.3.11
+ *) mod_rewrite: Allow to unset environment variables using E=!VAR.
+ PR 49512. [Mark Drayton <mark markdrayton info>, Stefan Fritsch]
+
*) mod_headers: Restore the 2.3.8 and earlier default for the first
argument of the Header directive ("onsuccess"). [Eric Covener]
...</a></em></td>
</tr>
<tr>
- <td>env|E=<em>VAR</em>[:<em>VAL</em>]</td>
+ <td>env|E=[!]<em>VAR</em>[:<em>VAL</em>]</td>
<td>Causes an environment variable <em>VAR</em> to be set (to the
- value <em>VAL</em> if provided). <em><a
+ value <em>VAL</em> if provided). The form !<em>VAR</em> causes
+ the environment variable <em>VAR</em> to be unset.<em><a
href="../rewrite/flags.html#flag_e">details ...</a></em></td>
</tr>
<tr>
<example>
[E=VAR:VAL]
+[E=!VAR]
</example>
<p><code>VAL</code> may contain backreferences (<code>$N</code> or
<p>you can set the environment variable named <code>VAR</code> to an
empty value.</p>
+<p>The form</p>
+
+<example>
+[E=!VAR]
+</example>
+
+<p>allows to unset a previouslz set environment variable named
+<code>VAR</code>.</p>
+
<p>Environment variables can then be used in a variety of
contexts, including CGI programs, other RewriteRule directives, or
CustomLog directives.</p>
while (env) {
name = do_expand(env->data, ctx, NULL);
- if ((val = ap_strchr(name, ':')) != NULL) {
- *val++ = '\0';
- } else {
- val = "";
+ if (*name == '!') {
+ name++;
+ apr_table_unset(ctx->r->subprocess_env, name);
+ rewritelog((ctx->r, 5, NULL, "unsetting env variable '%s'", name));
}
+ else {
+ if ((val = ap_strchr(name, ':')) != NULL) {
+ *val++ = '\0';
+ } else {
+ val = "";
+ }
- apr_table_set(ctx->r->subprocess_env, name, val);
- rewritelog((ctx->r, 5, NULL, "setting env variable '%s' to '%s'",
- name, val));
+ apr_table_set(ctx->r->subprocess_env, name, val);
+ rewritelog((ctx->r, 5, NULL, "setting env variable '%s' to '%s'",
+ name, val));
+ }
env = env->next;
}