I’ve been looking for a chance to play with UrlRewriteFilter for a while.. and I’ve finally found my opportunity.
A colleague has been talking up FeedBurner as a very swish feed stats crunching and decoration site, so I was keen to take it for a spin. I was asking how to handle the fact that you would need all your clients to add the new feed address? He mentioned that WordPress can do this with a simple plugin, so I figured I could get Pebble to work the same magic.
Enter UrlRewriteFilter. Catch the old feed address, send a redirect to the FeedBurner address, voila.
Deploying UrlRewriteFilter is a snap. Copy the jar file to your /WEB-INF/lib/ directory, copy a urlwrite.xml to your /WEB-INF/ directory, then hack web.xml to enable the filter. If you’re doing this for Pebble, insert the following entries after the jsp-config section of your web.xml:
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
<init-param>
<param-name>confReloadCheckInterval</param-name>
<param-value>3600</param-value>
</init-param>
</filter>
Probably don’t need the added “reload every hour” parameter unless you plan on messing with your config. I had it reloading its config file every few seconds when I was messing with pattern matching.
Now to the pattern matching part of the equation. I needed to match a pattern of /glen/rss.xml
or /glen/atom.xml
and send the user off to http://feeds.feedburner.com/glensmith
, but the trick was that I needed to exclude all my category specific feeds in /glen/categories/General/rss.xml
. Oh, and I also need to let a User-Agent containing the text “FeedBurner” through to the real feed, while redirecting everyone else. Turns out all that’s supported out of the box. Here’s my urlrewrite.xml:
<rule>
<note>
Redirect Root RSS/Atom feed to feedburner
</note>
<condition name="user-agent" operator="notequal">FeedBurner</condition>
<condition type="request-uri" operator="notequal">categories</condition>
<condition type="request-uri" operator="equal">glen</condition>
<from>.xml$</from>
<set type="response-header" name="Location">http://feeds.feedburner.com/glensmith
<set type="response-header" name="Pragma">no-cache</set>
<set type="response-header" name="Content-Length">0</set>
<set type="status">307</set>
</rule>
Fantastic. I’m now transparently redirecting clients to the new location, and with those pragma settings, I’m able to switch everything off in a flash. And it’s a ton more configurable than any ServletFilter that I could have whipped up for the task.
Great stuff UrlRewriteFilter folk!