I try to get
1 <Location "/?*[]/">
2 ProxyPass "http://backend/?*[]/"
3 ProxyPassReverse "http://backend/?*[]/"
4 </Location>
to work and get the error message
AH00526: Syntax error on line 2 of ...:
Regular expression could not be compiled.
I guess that "/?*[]/" is a valid location, right? So it should work, I
guess.
In mod_proxy.c, add_pass(), there is this snippet to detect a regex in
the location (f is cmd->path, which is the location):
if (cmd->path) {
[...]
if (apr_fnmatch_test(f)) {
use_regex = 1;
}
}
And later:
if (use_regex) {
new->regex = ap_pregcomp(cmd->pool, f, AP_REG_EXTENDED);
if (new->regex == NULL)
return "Regular expression could not be compiled.";
[...]
}
I think the reason for this is to handle a regex in a location correctly
(either <LocationMatch ...> or <Location ~ ...>).
Why is apr_fnmatch_test() used to recognize a regex? It only checks for
*, ? and [] pairs (the comment of apr_fnmatch_test() is misleading:
"Determine if the given pattern is a regular expression.").
Is there a better way to check the location for a regex? I don't think
so because I can configure a valid non-regex location that looks exactly
like a regex. Maybe expand struct cmd_parms_struct by a flag that marks
path as a regex? Then you wouldn't have to guess.
Thoughts? Maybe I'm understanding something wrong?