From: Heikki Levanto Date: Mon, 22 Jul 2013 09:40:49 +0000 (+0200) Subject: within header=... matches only the header value X-Git-Tag: v1.3.60~7 X-Git-Url: http://git.indexdata.com/?a=commitdiff_plain;h=19a8cbdf62b7307503fd4213a5b9626ec0d88f1c;p=metaproxy-moved-to-github.git within header=... matches only the header value Used to match the whole header line, but we need to use ^$ anchoring for host-relative regexps, and they need to anchor at the ends of the value. MP-470. --- diff --git a/src/filter_http_rewrite.cpp b/src/filter_http_rewrite.cpp index def74b1..8557a01 100644 --- a/src/filter_http_rewrite.cpp +++ b/src/filter_http_rewrite.cpp @@ -229,6 +229,12 @@ void yf::HttpRewrite::Phase::rewrite_headers(mp::odr & o, if (!it->header.empty() && regex_match(header->name, it->header)) { +#ifdef OLDHEADERMATCH + // Matches and replaces the whole header line. + // This is good if you want to play with the header name too, + // but useless for patterns that want to anchor to the beginning + // or end of the header value, as we want to do with host-relative + // links. This code should probably be removed. std::string sheader(header->name); sheader += ": "; sheader += header->value; @@ -246,6 +252,15 @@ void yf::HttpRewrite::Phase::rewrite_headers(mp::odr & o, header->value = odr_strdup( o, sheader.substr(pos + 2, std::string::npos).c_str()); } +#else + // Match and replace only the header value + std::string hval(header->value); + if (it->exec(vars, hval, true)) + { + header->value = odr_strdup(o, hval.c_str()); + } + +#endif } } }