Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?


Failed to load latest commit information.
Latest commit message
Commit time
June 11, 2022 01:55
June 1, 2022 03:11
June 24, 2011 01:49
June 1, 2022 03:11
June 1, 2022 03:11

Rewrite Build Status

Join the chat at

A highly configurable URL-rewriting tool for Java EE 6+ and Servlet 2.5+ applications, supporting integration with:

  • CDI
  • Spring DI
  • JodaTime configuration
  • URLRewriteFilter configuration
  • JavaServer Faces (JSF)
  • JavaServer Pages (JSP)
  • Struts
  • Wicket
  • Grails
  • Spring Roo
  • Spring Web Flow
  • Any servlet & web framework!
  • All major servlet containers and application servers

Get Help

Get Started

  1. It is recommended but not required to remove other URL-rewriting tools from your application before using Rewrite. If you choose to leave them in place, weird things may happen, be warned.

  2. Include OCPSoft Rewrite in your application's POM file:

  3. Add a configuration provider implementing the 'org.ocpsoft.rewrite.config.ConfigurationProvider' interface, or extending from the abstract HttpConfigurationProvider class for convenience:

     package com.example;
     public class ExampleConfigurationProvider extends HttpConfigurationProvider
        public int priority()
          return 10;
        public Configuration getConfiguration(final ServletContext context)
          return ConfigurationBuilder.begin()
  4. You must either annotate your ConfigurationProvider class with the @RewriteConfiguration annotation, OR create a file named: '/META-INF/services/org.ocpsoft.rewrite.config.ConfigurationProvider' which contains the fully qualified name of your ConfigurationProvider implementation:


Note that your annotated class won't be found, by default, if your ConfigurationProvider is in a jar inside a war. You can either set the servlet parameter org.ocpsoft.rewrite.annotation.SCAN_LIB_DIRECTORY to true, or use the ServiceLoader approach instead.

  1. Add rules to your configuration. Condition objects such as 'Direction.isInbound()' and 'Path.matches(...)' can be found in the 'org.ocpsoft.rewrite.config.' and 'org.ocpsoft.rewrite.servlet.config.' packages.

  2. Consider using Rewrite extensions for extra power:

  3. Run your application!


mvn package -PWILDFLY_MANAGED_8

(Or use any of the other profiles in pom.xml - Note, most seem to be failing right now due to stale maven packages. Pull requests fixing test proviles are appreciated!)


This project is looking for your feedback! What would make your task easier? How can we simplify this experience?


  • Continue simplification of Configuration objects and convenience APIs.

  • Implement additional xml & file-based configuration support.

  • Implement http://localhost:8080/rewrite-status monitoring tool