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!