我认为没有一种简单的方法可以删除所有查询字符串参数,除了通过 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]