Apache mod_rewrite bug still lurks

There’s this enormous apache mod_rewrite bug that I ran into back in 2005, and to my dismay, it’s still there. Long-standing bugs are usually small edge cases that don’t affect many people, but this one is a monster that I suspects pretty much everyone that’s using mod_rewrite, and they’ve just been lucky in avoiding it. The basic issue is this: if you match params that require URL encoding to be safe, mod_rewrite will not rewrite the back-reference (that’s $1 below) correctly. So take this very simple redirect:

RewriteRule ^(.*)$ index.php?show=$1 [R]

so you hit http://www.example.com/a%2Fb and mod_rewrite neatly rewrites it as http://www.example.com/index.php?show=a/b! Notice that it has urldecoded the matched parameter in the replacement string.

Apache 2.2 introduced a new B flag to deal with this, but that apparently suffers the same problem! There are two workarounds I’ve used that are both horrible: double-encode the source string (if you are in control of both start and end points of the URLs) to survive the spurious urldecode, or base-64 encode (javascript flavour) it and do the decoding yourself. I did warn you they were horrible.

I’ll bet that there are a zillion mod_rewrites out there that suffer from this fundamental problem and haven’t even noticed. If a few people voted for this to be fixed, it would probably go away…

Subversion MERGE error on commit nailed

Recently I’ve had a problem with subversion commits returning a ‘200 OK’ result, accompanied by a peculiar MERGE error (when I’m not doing a merge), but weirdly, the commit had actually made it into the repo. I’d googled for this a while ago with no success, but I had another try today and found this post. Thinking about it, I’d had this problem since updating to the very-very-long-awaited trac 0.11 release. So I tracked down the latest release of the trac-post-commit-hook script and installed that, and amazingly enough, it just works. Thank you UberGeek!

Partied out

Last night was my sister’s 10th wedding anniversary party at the RAF club on Piccadilly, followed by even more drinks at Floridita’s in Soho. Got home about 2, felt extremely rough this morning, then had to face a 4th birthday party, which was actually quite entertaining! Congrats to Becca & Ander, and best of luck for the next 10!

Transatlantic Mum

My Mum (and of course Ian, Roger, Curtis & Hannah) has this afternoon succesfully completed a transatlantic crossing in her boat, Elemiah. That’s quite an achievement. It took them three weeks, including about 5 days with no wind which they had to motor for. Three cheers for Elemiah!

Hopefully I’ll get a chance to take ZoĆ« on a weekend hop down the Med over the next month or two.