Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

.htaccess rewrite pass all query strings through

Currently I use:

RewriteRule ^([^/\.]+)/?$ page.php?page=$1 [L]

Which is good for when passing one querystring through.

But is there a way just to pass all querystrings through? i.e. One page request might be:

domain.com/contact?course=23

and another may be:

domain.com/contact?workshop=41

So I need to know what the query string name is, but only ever one will be passed in at a time

like image 417
Shane Avatar asked May 18 '11 16:05

Shane


2 Answers

If I understand your question correctly, you can just add the [QSA] (query string append) flag to the end of your RewriteRule

RewriteRule ^([^/\.]+)/?$ page.php?page=$1 [L,QSA]

This will process your request as you've already done, and add any further querystring params onto the end.

like image 126
Michael Berkowski Avatar answered Nov 07 '22 19:11

Michael Berkowski


This is what I do.

RewriteRule ^((/?[^/]+)+/?)$ ?q=$1 [L]

Now the whole part after domain.com/ is in $_GET['q'] in index.php. E.g. if you request domain.com/articles/12, q contains articles/12. It's then trivial parse it with e.g. explode('/', $_GET['q']).

like image 30
Core Xii Avatar answered Nov 07 '22 19:11

Core Xii