PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
[ start all new proposals below, under PATCHES PROPOSED. ]
-
- * mod_headers: Add 'Header SetIfEmpty header-name val' to only set
- a header if it's not already there (can't do this with Edit)
- trunk patch: http://svn.apache.org/1496338
- 2.4.x patch: trunk works
- +1: covener, jim, humbedooh
-
* mod_headers: Add 'Header note header-name note-name' to copy a headers
value into a note (so a CGI/Proxy header can be deleted and logged)
trunk patch: http://svn.apache.org/r1520908
<dt><code>set</code></dt>
<dd>The request header is set, replacing any previous header
with this name</dd>
+
+ <dt><code>setifempty</code></dt>
+ <dd>The request header is set, but only if there is no previous header
+ with this name</dd>
<dt><code>unset</code></dt>
<dd>The request header of this name is removed, if it exists. If
<dd>The response header is set, replacing any previous header
with this name. The <var>value</var> may be a format string.</dd>
+ <dt><code>setifempty</code></dt>
+ <dd>The request header is set, but only if there is no previous header
+ with this name</dd>
+
<dt><code>unset</code></dt>
<dd>The response header of this name is removed, if it exists.
If there are multiple headers of the same name, all will be
hdr_unset = 'u', /* unset header */
hdr_echo = 'e', /* echo headers from request to response */
hdr_edit = 'r', /* change value by regexp, match once */
- hdr_edit_r = 'R' /* change value by regexp, everymatch */
+ hdr_edit_r = 'R', /* change value by regexp, everymatch */
+ hdr_setifempty = 'i' /* set value if header not already present*/
} hdr_actions;
/*
if (!strcasecmp(action, "set"))
new->action = hdr_set;
+ else if (!strcasecmp(action, "setifempty"))
+ new->action = hdr_setifempty;
else if (!strcasecmp(action, "add"))
new->action = hdr_add;
else if (!strcasecmp(action, "append"))
else if (!strcasecmp(action, "edit*"))
new->action = hdr_edit_r;
else
- return "first argument must be 'add', 'set', 'append', 'merge', "
+ return "first argument must be 'add', 'set', 'setifempty', 'append', 'merge', "
"'unset', 'echo', 'edit', or 'edit*'.";
if (new->action == hdr_edit || new->action == hdr_edit_r) {
}
apr_table_setn(headers, hdr->header, process_tags(hdr, r));
break;
+ case hdr_setifempty:
+ if (NULL == apr_table_get(headers, hdr->header)) {
+ if (!strcasecmp(hdr->header, "Content-Type")) {
+ ap_set_content_type(r, process_tags(hdr, r));
+ }
+ apr_table_setn(headers, hdr->header, process_tags(hdr, r));
+ }
+ break;
case hdr_unset:
apr_table_unset(headers, hdr->header);
break;