将规则重定向到php查询,但删除请求的URL中的任何查询字符串

My url is being redirected using .htaccess as follows:

RewriteRule ^b/([^/]+)/([^/]+)? b/view.php?id=$2&name=$1

Friendly url -> translates to php url

domain.com/b/hello/2 -> b/view.php?id=2&name=hello

BUT when someone comes to the site as follows:

domain.com/b/hello/2?query=xyz

I don't know how to get rid of the ?query=xyz

I have tried everything including [QSD] and I can't seem to get it to work.

Update

I have managed to get it to work with the following but it does two 301 redirects instead of one:

RewriteCond %{THE_REQUEST} \?[^\ ]+
RewriteRule ^b/(.*)$ /x/$1? [R=301,L]
RewriteRule ^b/([^/]+)/([^/]+)/([^/]+)?$ b/view.php?id=$2&&name=$1

Check if adding the question mark at the end of the rule will cancel appending query string from left side

RewriteRule ^b/([^/]+)/([^/]+)? b/view.php?id=$2&name=$1? [QSD,L]

You can use an additional Rule to catch for GET parameters and strip them off.

RewriteCond %{QUERY_STRING} .+
RewriteRule ^(.*)$ /$1? [R=301,L]
RewriteRule ^b/([^/]+)/([^/]+)? b/view.php?id=$2&name=$1

To make it only work on the /b/ subfolder, use this:

RewriteCond %{QUERY_STRING} .+
RewriteRule ^b/(.*)$ b/$1? [R=301,L]
RewriteRule ^b/([^/]+)/([^/]+)? b/view.php?id=$2&name=$1

The first rule will redirect everything that matches your rule to the URL without any GET parameters (note the ? at the end of the rewrite rule, it will strip off the parameters).

The second rule will match in the case the first rule cannot be applied, i.e., when there are no paramaters