within header=... matches only the header value
authorHeikki Levanto <heikki@indexdata.dk>
Mon, 22 Jul 2013 09:40:49 +0000 (11:40 +0200)
committerHeikki Levanto <heikki@indexdata.dk>
Mon, 22 Jul 2013 09:40:49 +0000 (11:40 +0200)
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.

src/filter_http_rewrite.cpp

index def74b1..8557a01 100644 (file)
@@ -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
             }
         }
     }