Reputation: 46987
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
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
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