Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Match Question Mark in mod_rewrite rule regex

Tags:

I am looking to rewrite urls with multiple substrings. One substring is being requested as a subdirectory, while any others are requested as normal query string parameters.

For example, I would like to rewrite urls from

http://www.mysite.com/mark/friends?page=2 

to

http://www.mysite.com/friends.php?user=mark&page=2 

I am able to accomplish this with the exception of the question mark character. Here is my rewrite rule:

... RewriteEngine On RewriteBase / RewriteRule ^([A-Za-z0-9-_]+)/friends[?]?([^/\.]+)?$ friends.php?user=$1&$2 [L] 

If I change the question mark to any other character it works great. It seems like the problem is that the '?' character is being interpreted incorrectly as the start of a new query string.

I need to pass on any parameters that appear after /user/friends as is. How do I accomplish this?

like image 523
markb Avatar asked May 04 '09 22:05

markb


1 Answers

You should be using the [QSA] flag instead of trying to rewrite the query string. [QSA] passes on the query string to the rewritten URL.

So your rule should look like:

... RewriteEngine On RewriteBase / RewriteRule ^([A-Za-z0-9-_]+)/friends/? friends.php?user=$1 [QSA,L] 

Your case is very similar to the example given for using the QSA flag in the mod_rewrite cookbook.

like image 129
Chad Birch Avatar answered Nov 16 '22 11:11

Chad Birch