[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

Attachment: regexp_map.patch
Description: Binary data


Reply via email to