Expand my Community achievements bar.

Submissions are now open for the 2026 Adobe Experience Maker Awards.

help understand the effects of an Apache RewriteRule to the request object

Avatar

Level 9

So I have the following rule

 

RewriteRule ^/page11/([0-9]+)/page12/([0-9]+)$ /content/myapp/us/en/page11/page12.html?id=$1&year=$2 [PT,L,QSA]


I know that if I navigate to https://myapp.com/page11/1234/page12/2025, the Apache will rewrite this to https://myapp.com/page11/page12.html?id=1234&year=2025.

 

But in my Java class, what's the actual URL in the request object? I'm guessing is the rewritten URL (the one with the id and year parameters). correct?

Thanks!

2 Replies

Avatar

Community Advisor

Hi @jayv25585659 ,

Here’s what happens in your Java code when that Apache rule runs:

You are partly right, but it's a mix. The request object will show you the original URL path, but it will happily give you the new parameters.

Think of it like this: Apache receives the request for /page11/1234/page12/2025, does its internal magic, and then knocks on Tomcat's door and says, "Hey, handle this request for /content/myapp/us/en/page11/page12.html?id=1234&year=2025, but please don't tell the client we changed anything."

So, in your servlet:

 

  • request.getRequestURI() will return the original path: /page11/1234/page12/2025
  • request.getParameter("id") will return "1234"
  • request.getParameter("year") will return "2025"

The key to this behavior is the [PT] (PassThrough) flag in your rule. It tells Apache to rewrite the URL internally and then pass the new, rewritten request on to the next part of the server (in this case, your Java application) while keeping the original URL a secret from the user's browser.

If you ever need to see the rewritten path for debugging, it's stored in the request attributes. You can find it like this:

String internalPath = (String) request.getAttribute("javax.servlet.forward.request_uri");
// internalPath would be "/content/myapp/us/en/page11/page12.html"

But for most purposes, you'll just use getParameter() to get the values you need (id and year), and you can ignore the original URI.

Thanks,
Amit

Avatar

Level 9

thank you so much.