Match Question Mark in mod_rewrite rule regex
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 OnRewriteBase /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.
The query is not part of the URL path and thus cannot be processed with the RewriteRule
directive. This can only be done with the RewriteCond
directive (see %{QUERY_STRING}
).
But as Chad Birch already said it suffices th set the QSA
flag to automatically get the original requested query appended to the new URL.
In addition to using the rewrite flag QSA, you can also use the QUERY_STRING environment variable as shown below:
RewriteEngine OnRewriteBase /RewriteRule ^([A-Za-z0-9-_]+)/friends$ /friends.php?user=$1&%{QUERY_STRING}
And the URL in question
http://www.example.com/mark/friends?page=2
will be rewritten to (as specified):
http://www.example.com/friends.php?user=mark&page=2