Use RewriteCond %{QUERY_STRING} without attaching the query string to the new address

.htaccess, mod-rewrite, regex

Solution

RewriteCond %{QUERY_STRING} view=products&id=12345 
RewriteRule .*$ /8831? [L,R=301]

The ending `?` will prevent the original query parameters from being appended, unless you also give the `[QSA]` flag again.

From the manual:

Note: Query String The Pattern will not be matched against the query string. Instead, you must use a RewriteCond with the %{QUERY_STRING} variable. You can, however, create URLs in the substitution string, containing a query string part. Simply use a question mark inside the substitution string, to indicate that the following text should be re-injected into the query string. When you want to erase an existing query string, end the substitution string with just a question mark. To combine a new query string with an old one, use the [QSA] flag.

Problem

I try to do a 301 redirect with .htaccess. The issue: ``` /?view=products&id=12345 -> /8831 ``` there is no relation between the old and the new address. For some reason ``` Redirect 301 /?view=products&id=12345 /8831 ``` doesn't work. If I remove the question mark, it works without question mark. i tried also: ``` RewriteCond %{QUERY_STRING} view=products&id=12345 RewriteRule .*$ /8831 [L,R=301] ``` but it redirects me to `/8831?view=products&id=12345`, which is not good for me. I don't need the query string in the new url-

Original source