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

时间:2015-07-26 12:18:50

标签: regex apache .htaccess mod-rewrite url-rewriting

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

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

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

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

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

示例:

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

(anything after or /admin/) - ignore

否则 - 清理查询字符串。

1 个答案:

答案 0 :(得分:1)

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