htaccess RewriteRule page with query string
.htaccess, apache, mod-rewrite, redirect
Solution
You need to match against the `%{QUERY_STRING}` variable. The query string isn't part of the match in a `RewriteRule`:
RewriteCond %{QUERY_STRING} ^who=a$
RewriteRule ^people.php$ /people/?t=leadership [R=301,L]
RewriteCond %{QUERY_STRING} ^who=f$
RewriteRule ^people.php$ /people/?t=faculty [R=301,L]
RewriteCond %{QUERY_STRING} ^who=p$
RewriteRule ^people.php$ /people/?t=students [R=301,L]
RewriteCond %{QUERY_STRING} ^who=r$
RewriteRule ^people.php$ /people/ [R=301,L]
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^people.php$ /people/ [R=301,L]
Problem
I have a set of pages that I'm trying to redirect to new URLs. They have different query strings in the target URL than in the original URL. ``` http://localhost/people.php?who=a ``` should redirect to: ``` http://localhost/people/?t=leadership ``` And on and on... I have the following set of rewrite rules and am obviously doing something very wrong. ``` RewriteRule ^people.php?who=a /people/?t=leadership [R=301,L] RewriteRule ^people.php?who=f /people/?t=faculty [R=301,L] RewriteRule ^people.php?who=p /people/?t=students [R=301,L] RewriteRule ^people.php?who=r /people/ [R=301,L] RewriteRule ^people.php /people/ [R=301,L] ``` What's happening is that the first 4 rules don't match and the page redirects to: ``` http://localhost/people/?who=a ``` I have tried the QSD flag, but it seems like my problem is that the rule isn't matching on the entire query string, not that it's passing the query string along.