htaccess と正規表現だけで ver/load/dir のバリエーションを除いて、すべてのクエリ文字列パラメーターを削除する簡単な方法はないと思います。
次のようなものがある場合:
www.myweb.com/?q=q&a=a& ver=3.5 &z=z&w=w& load=min &x=x& dir=ltr &c=c&d=d
ver/load/dir パラメータをいくつでも抽出するのは難しいでしょう:
www.myweb.com/?ver=3.5&load=min&dir=ltr
あなたは次のようなことをした方が良いです:
# remove all params if no ver/dir/load
RewriteCond %{QUERY_STRING} !^$
RewriteCond %{QUERY_STRING} !(ver|dir|load)=[^&]+
RewriteRule ^(.*)$ /$1? [L,R=301]
# query string isn't only ver/dir/load params, cleanse them with a php script:
RewriteCond %{QUERY_STRING} !^(&?(ver|dir|load)=[^&]+)+$
RewriteCond %{REQUEST_URI} !qs-clean\.php
RewriteRule ^(.*)$ /qs-clean.php?page=$1 [L,QSA]
次に、qs-clean.php
スクリプトでは、次のようになります。
<?php
$qs="";
if(isset($_GET['load']))
$qs=$qs . '&load=' . $_GET['load'];
if(isset($_GET['ver']))
$qs=$qs . '&ver=' . $_GET['ver'];
if(isset($_GET['dir']))
$qs=$qs . '&dir=' . $_GET['dir'];
header("HTTP/1.1 301 Moved");
header('Location: /' . $_GET['page'] . '?' . substr($qs,1));
?>
したがって、リダイレクトを実行し、関心のあるパラメーターのみを出力します。
ver/dir/load パラメーターのいずれかがクエリ文字列に表示された場合にクエリ文字列を削除しないことが問題である場合は、mod_rewriteを使用して実行できます。他のケースで行われていたのはリダイレクトです:
# remove all params if no ver/dir/load
RewriteCond %{QUERY_STRING} !^$
RewriteCond %{QUERY_STRING} !(ver|dir|load)=[^&]+
RewriteRule ^(.*)$ /$1? [L,R=301]