Hi everyone. I'm having trouble using org.eclipse.jetty.rewrite.handler.RewriteRegexRule from within jetty-rewrite.xml. My needs are very simple:
* Internally rewrite all URLs matching /foo/(.*) to a WAR named $1 in webapps. * Make the original untranslated URL available to the WAR in getPathInfo(). For instance, if the URL is /foo/bar, that should internally redirect to a webapp named bar.war (ie. /bar). Similarly, /foo/bar/baz should redirect to /bar/baz and be picked up by bar.war. Ideally, I would set up Jetty so that all WARs inside a specific directory are accessed from /foo. Is that possible? My URL redirection requirements are really basic, but I can't get even this to work. I must be missing something. I can do it using mod_rewrite in Apache, but I don't want to introduce that extra dependency. Searching the web, I'm not the only one who has this issue but I can't find any solutions. I'm using jetty-hightide-7.2.1.v20101111 on Mac OS Snow Leopard (should that make a difference). You can find my etc/jetty-rewrite.xml below. Here's what happens: * http://localhost:8080/bar brings up the webapp at bar.war just fine. * http://localhost:8080/foo/bar => HTTP 404 (Jetty style) * http://localhost:8080/foo => HTTP 404 (Jetty style) * http://localhost:8080/foo/ => contents of webapps/root/index.html * http://localhost:8080/foo/a => contents of webapps/root/index.html * Indeed, any single letter after /foo/ brings up webapps/root/index.html. Anything else brings up HTTP 404 If I change replacement to "/$1", all the above exhibit the same behaviour except: * http://localhost:8080/foo/bar => HTTP 302 to http://localhost:8080/bar/ * http://localhost:8080/foo/a => HTTP 404 (Jetty style) This is great, except that I don't want HTTP 302 as that's not an internal redirect as advertised. If I switch to RedirectRegexRule without the leading slash in replacement, then: * http://localhost:8080/foo => HTTP 404 (Jetty style) * anything starting with http://localhost:8080/foo/ results in a redirection loop to the same URL Introducing the slash with RedirectRegexRule redirects with HTTP 302 as expected. Any help would be appreciated. Thanks. Ian. My etc/jetty-rewrite.xml: <Configure id="Server" class="org.eclipse.jetty.server.Server"> <Get id="oldhandler" name="handler"/> <Set name="handler"> <New id="Rewrite" class="org.eclipse.jetty.rewrite.handler.RewriteHandler"> <Set name="handler"><Ref id="oldhandler"/></Set> <Set name="rewriteRequestURI">true</Set> <Set name="rewritePathInfo">false</Set> <Set name="originalPathAttribute">requestedPath</Set> <Call name="addRule"> <Arg> <New class="org.eclipse.jetty.rewrite.handler.RewriteRegexRule"> <Set name="regex">/foo/(.*)</Set> <Set name="replacement">$1</Set> </New> </Arg> </Call> </New> </Set> </Configure> _______________________________________________ jetty-users mailing list [email protected] https://dev.eclipse.org/mailman/listinfo/jetty-users
