This seems like a cool idea. While I have no use for the functionality
myself I encounter people on irc every day that could benefit from
something like this to simplify complex rewrite sets.
--
Rich Bowen, mobile edition
rbo...@rcbowen.com
On May 5, 2014 4:14 PM, Jim Riggs apache-li...@riggs.me wrote:
[Posting separately to both dev and users to see if anyone on either side
sees value in getting this committed.]
About a year ago, I had an idea for a new type of RewriteMap that would
fill an important need for a few particular use cases that we have [1].
While we were at ApacheCon in Denver, I spent some time talking with
JimJag, Rich, and Covener as well as updating the code from a crude proof
of concept to something real. I would appreciate feedback from anyone,
especially on whether or not this is something worth pursuing getting
committed.
It is a simple concept: the map is just a list of regexp patterns and
replacements. These could be done as individual RewriteRules, obviously,
but this rewrite map would reduce clutter in the config file, be more
readable, and could even be externally generated/maintained without any
httpd admin involvement. For example, an application or batch job could
generate a map file with dozens or hundreds of entries that httpd would
pick up without a restart/graceful, and the config might only contain a
single RewriteRule:
[map file]
/foo(bar)? /baz$1
/(apple|banana|orange) /fruit/$1
/post/(\d+)(/.*)? /article/$1$2
...
[config file]
RewriteMap regexptest regexp:path/to/re.map
RewriteCond ${regexptest:$1} ^(.+)$
RewriteRule ^(.*)$ %1 [R]
...
Possible use cases that I can think of:
1. Redirect list (e.g. legacy site to new site) without pages of
RewriteRules/Redirects
2. Simplify 100s or 1000s of rewrite rules into 1 + the map as above
3. White list of URL patterns to proxy through to backend servers (can
be application generated; my particular use case)
4. Maps could be application generated, maintained in a spreadsheet or DB,
or created with scripts/greps/etc.
Just like text and hash maps, results are cached. I did some tests with up
to 100K entries in the map, and it was still extremely responsive and
worked flawlessly. The only thing this doesn't have is flags (e.g. NC), but
that can be handled in the pattern itself via (?i).
If interested, I would love it if some folks would try the attached patch
and let me know what you think.
- Jim
[1] http://httpd.markmail.org/thread/3dheejtgwmdpxxt5