如何从 URL 中删除一个目录以外的所有查询字符串?

How do I strip all query string besides one directory from URL?

我想使用查询 /?campaign=whatever 等强制重写所有 url

我写了这样的东西(我不确定这是否是最好的方式):

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^?]*)\? 
RewriteRule (.*) /? [R=301,L]

如何告诉 apache 不要只重写目录 /admin/

此外,如果有人知道是否有可能使用这种技术搞砸其他一些服务?我不需要分析活动等,人们只是 link 用他们自己的愚蠢跟踪 url 到我的博客,它绕过了缓存,但我目前无法更改缓存系统。

示例:

http://www.example.com/admin/
http://www.example.com/admin/pages.php?var=blabla

(anything after or /admin/) - ignore

否则 - 清理查询字符串。

RewriteCond %{QUERY_STRING} .+
RewriteCond %{REQUEST_URI} !^/admin(?:/.*)?$
RewriteRule (.*) /? [R=301,L]
  1. 检查查询字符串是否包含某些内容。
  2. 如果 request URI 不是以 /admin/ 开头,请检查 request URI
  3. 如果满足所有条件,重定向 URL - 删除查询字符串。