httpd-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jim Riggs <>
Subject [users@httpd] [patch] regexp rewrite map
Date Mon, 05 May 2014 20:14:48 GMT
[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/"

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

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


View raw message