Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 389
Ross Avatar asked Nov 22 '25 01:11

Ross


1 Answers

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]
like image 69
Gumbo Avatar answered Nov 23 '25 23:11

Gumbo



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!