[undertow-dev] More rewrite handler testing and questions
Brad Wood
bdw429s at gmail.com
Thu Jul 9 16:46:54 EDT 2020
While I'm asking about rewrites, I should mention I have come across
the io.undertow.servlet.compat.rewrite package, however
- It's not mentioned anywhere in the docs
- The code itself has no comments of any kind explaining it
- There's no handlerbuilder so it doesn't appear the RewriteHandler can
be used with Undertow's predicate language
I am intrigued by it since it appears to be specifically written to fire in
the servlet's handler chain and it appears to be a rather robust
implementation, I just can't find any docs on how to use it!
What is the backstory with Undertow core rewrite handler and servlet
rewrite handler?
Thanks!
~Brad
*Developer Advocate*
*Ortus Solutions, Corp *
E-mail: brad at coldbox.org
ColdBox Platform: http://www.coldbox.org
Blog: http://www.codersrevolution.com
On Thu, Jul 9, 2020 at 11:42 AM Brad Wood <bdw429s at gmail.com> wrote:
> So, in my bid to put the predicate language through the paces, I've been
> testing out all the rewrite rules I've ever used with mod_rewrite or Tuckey
> Rewrite to see if Undertow's handlers are up to the task.
>
> I've run into an issue again with probably the most common rewrite rule of
> any CFML app using an MVC framework, which is a rule that creates so-called
> "SES" URLs and force all requests through a front controller design
> pattern.
>
> Basically
>
> site.com/home/about
>
>
> gets rewritten to
>
> site.com/index.cfm/home/about
>
>
> Here you can see how this rule is typically accomplished in Apache httpd,
> Nginx, IIS, and Tuckey:
>
>
> https://coldbox.ortusbooks.com/the-basics/routing/requirements/rewrite-rules
>
>
> The hang up is that* any incoming path that maps to an actual file* skips
> the rewrite rule. That way* /images/logo.jpg* doesn't get rewritten.
>
> So here was my first stab at it with Undertow's predicate language-- it
> seemed simple enough:
>
> not file and not directory -> rewrite('/index.cfm/%{RELATIVE_PATH}')
>
>
> But our old friend the servlet of course is nowhere to be found since my
> "file" and "directory" predicates were executing in the root handler chain
> so there is no concept of a servlet's context root with which to resolve
> file system paths.
>
> So basically, I understand exactly why this doesn't work, but I feel that
> we need to find a way to make this work. This is a feature that pretty
> much every rewrite engine I've ever used has-- the ability to test the file
> system to see if a file or directory exists. Can we discuss the following
> options?
>
> - Find a way for the root handler chain to access the deployment's
> resource manager
> - Find a way for the rewrite handler to correctly affect not only the
> exchange but also (optionally) the HttpServletRequest so it's possible to
> rewrite the URL inside of the servlet's handler chain. I know for certain
> this is possible because the Tuckey Rewrite engine is implemented as a
> servlet filter.
>
> I would prefer the first option since I do like having the predicates in
> the root handler chain so it can run as early as possible.
>
> Thanks!
>
> ~Brad
>
> *Developer Advocate*
> *Ortus Solutions, Corp *
>
> E-mail: brad at coldbox.org
> ColdBox Platform: http://www.coldbox.org
> Blog: http://www.codersrevolution.com
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/undertow-dev/attachments/20200709/4d732be8/attachment.html
More information about the undertow-dev
mailing list