Rewrite handler is responsible for managing the rules. Its capabilities
is not only limited for URL rewrites such as RewritePatternRule or RewriteRegexRule.
There is also handling for cookies, headers, redirection, setting status or error codes
whenever the rule finds a match.
The rules can be matched by the either: pattern matching of PathMap
(eg
PatternRule), regular expressions (eg
RegexRule) or certain conditions set
(eg
MsieSslRule - the requests must be in SSL mode).
The rules can be grouped into rule containers (class
RuleContainer), and will only
be applied if the request matches the conditions for their container
(e.g., by virtual host name)
The list of predefined rules is:
-
CookiePatternRule - adds a new cookie in response.
-
HeaderPatternRule - adds/modifies the HTTP headers in response.
-
RedirectPatternRule - sets the redirect location.
-
ResponsePatternRule - sets the status/error codes.
-
RewritePatternRule - rewrites the requested URI.
-
RewriteRegexRule - rewrites the requested URI using regular expression for pattern matching.
-
ProxyRule - proxies the requested URI to the host defined in proxyTo.
-
MsieSslRule - disables the keep alive on SSL for IE5 and IE6.
-
LegacyRule - the old version of rewrite.
-
ForwardedSchemeHeaderRule - set the scheme according to the headers present.
-
VirtualHostRuleContainer - checks whether the request matches one of a set of virtual host names.
Here is a typical jetty.xml configuration would be:
<New id="RewriteHandler" class="org.eclipse.jetty.rewrite.handler.RewriteHandler">
<Set name="rules">
<Array type="org.eclipse.jetty.rewrite.handler.Rule">
<Item>
<New id="rewrite" class="org.eclipse.jetty.rewrite.handler.RewritePatternRule">
<Set name="pattern">/*</Set>
<Set name="replacement">/test</Set>
</New>
</Item>
<Item>
<New id="rewrite" class="org.eclipse.jetty.rewrite.handler.ProxyRule">
<Set name="pattern">/*</Set>
<Set name="proxyTo">http://webtide.com:8080</Set>
</New>
</Item>
<Item>
<New id="response" class="org.eclipse.jetty.rewrite.handler.ResponsePatternRule">
<Set name="pattern">/session/</Set>
<Set name="code">400</Set>
<Set name="reason">Setting error code 400</Set>
</New>
</Item>
<Item>
<New id="header" class="org.eclipse.jetty.rewrite.handler.HeaderPatternRule">
<Set name="pattern">*.jsp</Set>
<Set name="name">server</Set>
<Set name="value">dexter webserver</Set>
</New>
</Item>
<Item>
<New id="header" class="org.eclipse.jetty.rewrite.handler.HeaderPatternRule">
<Set name="pattern">*.jsp</Set>
<Set name="name">title</Set>
<Set name="value">driven header purpose</Set>
</New>
</Item>
<Item>
<New id="redirect" class="org.eclipse.jetty.rewrite.handler.RedirectPatternRule">
<Set name="pattern">/test/dispatch</Set>
<Set name="location">http://jetty.eclipse.org</Set>
</New>
</Item>
<Item>
<New id="regexRewrite" class="org.eclipse.jetty.rewrite.handler.RewriteRegexRule">
<Set name="regex">/test-jaas/$</Set>
<Set name="replacement">/demo</Set>
</New>
</Item>
<Item>
<New id="forwardedHttps" class="org.eclipse.jetty.rewrite.handler.ForwardedSchemeHeaderRule">
<Set name="header">X-Forwarded-Scheme</Set>
<Set name="headerValue">https</Set>
<Set name="scheme">https</Set>
</New>
</Item>
<Item>
<New id="virtualHost" class="org.eclipse.jetty.rewrite.handler.VirtualHostRuleContainer">
<Set name="virtualHosts">
<Array type="java.lang.String">
<Item>eclipse.com</Item>
<Item>www.eclipse.com</Item>
<Item>eclipse.org</Item>
<Item>www.eclipse.org</Item>
</Array>
</Set>
<Call name="addRule">
<Arg>
<New class="org.eclipse.jetty.rewrite.handler.CookiePatternRule">
<Set name="pattern">/*</Set>
<Set name="name">CookiePatternRule</Set>
<Set name="value">1</Set>
</New>
</Arg>
</Call>
</New>
</Item>
</Array>
</Set>
</New>
<Set name="handler">
<New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
<Set name="handlers">
<Array type="org.eclipse.jetty.server.Handler">
<Item>
<Ref id="RewriteHandler"/>
</Item>
<Item>
<New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
</Item>
<Item>
<New id="DefaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler"/>
</Item>
<Item>
<New id="RequestLog" class="org.eclipse.jetty.server.handler.RequestLogHandler"/>
</Item>
</Array>
</Set>
</New>
</Set>