Ross
Ross

Reputation: 46987

Rewriting query string using mod_rewrite

In my MVC application I use a uri router than determines which controller and action to use and detects GET parameters from the uri. I've written it so that it will accept both these forms:

http://localhost/controller/action/param1Name/param1Value
http://localhost/controller/action?param1Name=param1Value

Now what I'd like to do is use mod_rewrite to redirect the ?p=v form to the /p/v form (reasoning is purely cosmetic, GET forms use the ?x=y form). I'm completely stuck with how I'd do this however - I have an idea I need to use ${QUERY_STRING} but I'm not sure how.

Upvotes: 3

Views: 421

Answers (2)

Gumbo
Gumbo

Reputation: 655189

If you really want to redirect requests of the form /controller/action?param1Name=param1Value to /controller/action/param1Name/param1Value, try this:

RewriteCond %{THE_REQUEST} ^GET\ /[^/]+/[^/]+\?[^\s]+
RewriteCond %{QUERY_STRING} ^([^=&]+)=([^&]+)&?(.*)
RewriteRule ^[^/]+/[^/]+.* /$0/%1/%2?%3 [N]
RewriteCond %{THE_REQUEST} ^GET\ /[^/]+/[^/]+\?[^\s]+
RewriteRule ^[^/]+/[^/]+.* /$0 [L,R=301]

But if you want to opposite way:

RewriteRule ^([^/]+/[^/]+)/([^/]+)/([^/]+)(/.*) $1$4?$2=$3 [QSA]

Upvotes: 2

Supertux
Supertux

Reputation: 8318

If you're doing it for cosmetic reasons you may want to do a POST instead, and then the query params will not be shown in the URL.

If not - I'd like to see the answer to this one myself!

Upvotes: 1

Related Questions